文章目录
- 问题
- 分析
问题
js中 0==‘0’、0==[] 为 true ,为什么 ‘0’==[] 为false
分析
==
是弱类型比较
- 当两者类型不同时会发生类型转换
0 == “0”
:先把“0”
转为number
类型再比较;0 == []
:有对象的话,先获取对象的原始值,如果原始值为number
类型,直接与0
比较;如果原始值为字符串类型,先转为number
类型再比较;(在这里[]
的原始值为“”
,符合第二种情况)“0” == []
:首先获取[]
的原始值,即空字符串“”
,然后进行两个字符串“0”
与“”
之间的比较。字符串之间的比较遵循的是逐个字符使用基于标准字典的 Unicode 值来进行比较的规则,所以这俩字符串不同。
前两者等式成立都是因为发生了一次类型转换,而后者如果要成立,就要发生两次类型转换,这应该是非法的。真正成立的等式是’’==[],只发生一次类型转换其实你拿str=“0”,然后取str[0]就知道这个其实是有值的,这显然不符合空数组的定义