JS面试题

96 阅读2分钟

1、undefined与null

undefined:“无”原始值 NaN
null:“无”对象 0

什么情况下会undefined?
1、变量声明了没赋值
2、对象上的某个属性不存在
3、函数调用时少了参数
4、函数的默认返回值

什么情况下会null?
1、手动释放内存
let obj = {}
obj = null;
2、作为函数的参数(此参数不是对象)
3、原型链的顶端

2、forEach()与map()

forEach
1、没有返回值
2、不能用break打断
3、遍历的是value值
let arr = ['a', 'b', 'c']
let res = arr.forEach(element => {
console.log(element)
// break;
return element + '1'
})
console.log(res)
// 返回的是undefined

3、ES6之filter

可看做是数组新的方法,用来过滤的
1.current:当前循环的值 2.index:当前值的下标 3.array:b数组的对象
let a = [1, 2, 3, 14, 15]
let b = a.filter((current, index, array) => {
return current < 10
})
console.log(a)
console.log(b)

4、递归实现1-100求和

掌握递归思维

5、ES6高频面试题

var let const 都是用来定义变量
var
1、声明提升 => 先上车后买票
console.log(num) //undefined
var num = 123
2、变量覆盖,以最新的为准
3、没有块级作用域 (在for循环体外依然能定义)
function fn() {
for(var i = 0; i <3; i++){
console.log(i)
}
console.log(i)
}
fn()

let
1、变量允许被修改
let Demo = 123

Demo = 456
console.log(Demo)

const 1、变量定义的值不允许被修改
2、变量声明之后必须赋值
3、支持let的其他属性
4、变量名称大写一般是指常量(DEMO),一般作用于全局
`const demo = 123
// demo = 456
console.log(demo)
// 不引用第三方变量,采用ES6解构方式,交换2个变量
let a = 1;
let b = 2;
[a, b] = [b, a]
console.log(a, b)
// ES6快速去重 解构+new
let arr = [12, 13, 14, 12, 45, 67]
let item = [...new Set(arr)]
console.log(item)

// promise调用接口
// 构造函数同步执行
const promise = new Promise((resolve,reject) =>{
console.log(1)
resolve();
console.log(2)
})
// .then()异步执行
promise.then(() => {
console.log(3)
})
console.log(4)
// 结果是:1243
`

6、原型与原型链

7、New关键字

8、This指向问题

9、js闭包问题

1、闭包是什么?
方法里返回的一个方法
function a(){ let a1 = 1; return function(){ return a1 } }
2、闭包的意义?

  • 延长变量生命周期
  • 创建私有环境 如果不用闭包,方法执行完一次就没了。用闭包可以永久的存在内存当中,但是要慎用,如果要清除闭包的变量要手动清除。 // a:全局变量(保存在scope里) // b:局部变量(保存在local里) let a = '小明' function fn1(){ let b = 1 // console.log(a) } // // console.log(b) fn1()
  • 创造私有环境