Javascript与添加空数组和对象的类型和结果混淆
我遇到过这样的比较:Javascript与添加空数组和对象的类型和结果混淆,javascript,Javascript,我遇到过这样的比较: [] + [] === ''; // true [] * 1 === 0; // true false + 1 === 1; // true 最后一个比较是有意义的,但我想知道的是,为什么[]+[]等于空字符串,为什么[]*1equals0?链接自hardik shah发表的评论,肯定会让您更好地理解javascript如何处理这些类型的评估。这个答案指向ecma文档,它也很有用。我将尝试对您发布的示例如何工作进行有限的解释 下面我引用了我作为解释+操作符的
[] + [] === ''; // true
[] * 1 === 0; // true
false + 1 === 1; // true
最后一个比较是有意义的,但我想知道的是,为什么[]+[]
等于空字符串,为什么[]*1
equals0
?链接自hardik shah发表的评论,肯定会让您更好地理解javascript如何处理这些类型的评估。这个答案指向ecma文档,它也很有用。我将尝试对您发布的示例如何工作进行有限的解释
下面我引用了我作为解释+
操作符的这些实例如何工作的基础的文章。我相信我对这篇文章的解释是正确的,但我不是这些方面的专家,所以我很乐意被纠正
这是正确的,因为两个操作数都是对象
[].valueOf
不返回原语,因此使用[].toString
,其计算结果为'
这是正确的,因为其中一个操作数是基元,所以使用算术运算而不是串联运算<代码>''*1计算为
0*1
,等于0
这里的两个操作数都是原语,因此将使用算术运算<代码>数字(false)为0,因此
0+1
等于1
从
- 如果对象类型为Date,则使用toString()方法李>
- 在其他情况下 如果返回原语值,则使用valueOf()方法
- 在其他情况下(如果valueOf()不存在或不返回原语值), 然后使用toString()方法。这种情况经常发生
对于[]+[],请参见以下说明:您无法使用数组进行数学运算,因此javascript会将
[]
转换为0
[] + [] === ''; // true
[] * 1 === 0; // true
false + 1 === 1; // true