前端面试题总结

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.:什么是浅拷贝?如何实现浅拷贝?什么是深拷贝?如何实现深拷贝?

原文地址:https://www.cnblogs.com/wangpeiyuan/p/13281066.html