Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript与添加空数组和对象的类型和结果混淆_Javascript - Fatal编程技术网

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
equals
0

链接自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