前端面试题总结
1.写出[]==![]的结果并解释原因 false
涉及知识点:==比较运算符的转换规则
1)undefined和null比较之前不能进行任何类型的转换,等于true
2)如果有一个操作数是NAN,则返回false
3)如果一个操作数是字符串类型,一个操作数是数值类型,则先将字符串类型转换成数值类型之后进行比较
4)如果一个操作数是布尔值类型,一个操作数是数值类型,则将布尔值类型转换成数值类型之后进行比较
5)如果一个操作数是字符串类型,一个操作数是布尔值类型,则将字符串和布尔值类型都转换成数值类型之后进行比较
6)如果一个操作数是复杂类型,一个操作数是数值或字符串类型,则复杂类型先调用自身的toValueof()或者toString()方法将其转换成基础类型之后进行比较
[]==![] 这题中,!的优先级高于==运算符,所以![]现将空数组转换成布尔类型为false,再转换成数值类型0,等号右侧[]调用toValueof()方法转换成字符串'',再转换成数值类型0,所有相等
2.什么是闭包?
闭包就是函数A内部有一个函数B,函数B中科院访问函数A内部作用域中的变量,函数B就是闭包。函数存在的意义就是科院让我们间接的访问函数内部的变量
function A() {
function B() {console.log(b)}
window.C=function() {console.log(c)}
return B
}
函数B和C都是闭包
3.:什么是浅拷贝?如何实现浅拷贝?什么是深拷贝?如何实现深拷贝?