1. 运算符“==”和“===”有什么区别?
“===”是严格相等,左右两边不仅值要相等,类型也要相等,例如'1'===1的结果是false,因为一边是string类型,另一边是number类型。
“==”两边只要值相等,就返回true,例如'1'==1的结果是true。
“==”两边类型不一样时,先进行自动类型转换后,再比较值是否相同。
2. null和undefined有什么区别?
(1)null转为数值时为0,undefined转为数值时为NaN。
(2)当声明的变量还未被初始化时,变量的默认值为undefined。
(3)调用函数时,应该提供的参数没有提供,该参数的值为undefined。
(4)对象中没有赋值的属性,该属性的值为undefined。
(5)函数没有返回值时,默认返回undefined。
3. typeof是否能正确判断所有数据类型?
不能。对于原始类型来说,除了null都可以调用typeof显示正确的类型。对于引用数据类型,除了函数之外,都会显示“object”。因此采用typeof判断null和对象数据类型是不合适的,采用运算符instanceof会更好,instanceof的原理是基于原型链的查询,只要处于原型链中,判断永远为true。