Javascript 为什么+;[[]]和#x2B;[[]`返回字符串吗?

Javascript 为什么+;[[]]和#x2B;[[]`返回字符串吗?,javascript,Javascript,有一条语句+[[]]+[[]]。控制台返回“0”(字符串)。 当语句为+[[]]时,控制台返回0(一个数字)。 如果+0+0为0,第一个函数为什么会返回字符串?这里的语法树如下所示 + / \ / \ + [ ] | | | | [ ] [ ] | | [ ] 也就是说,二进制

有一条语句
+[[]]+[[]]
。控制台返回“0”(字符串)。 当语句为
+[[]]
时,控制台返回0(一个数字)。
如果
+0+0
为0,第一个函数为什么会返回字符串?

这里的语法树如下所示

            +
           / \
          /   \
         +   [   ]
         |     |
         |     |
       [   ]  [ ]
         |
         |
        [ ]
也就是说,二进制
+
的左侧操作数是一元
+
运算的结果,右侧操作数是
[[]]
表达式的结果

左边是一个数字,每个操作符调用

右侧是一个对象,它通过(通过调用对象的
toString
方法)在的步骤9中转换为字符串原语。对于数组,
toString
返回数组内容的字符串化形式,并用逗号连接,在本例中为空字符串

您可以通过在某些对象上重写
toString
并查看更改的结果来验证这一点:

var a = [];
a.toString = function() { return "foo"; };
console.log(0 + a);

这将生成
“0foo”

此处的语法树如下所示

            +
           / \
          /   \
         +   [   ]
         |     |
         |     |
       [   ]  [ ]
         |
         |
        [ ]
也就是说,二进制
+
的左侧操作数是一元
+
运算的结果,右侧操作数是
[[]]
表达式的结果

左边是一个数字,每个操作符调用

右侧是一个对象,它通过(通过调用对象的
toString
方法)在的步骤9中转换为字符串原语。对于数组,
toString
返回数组内容的字符串化形式,并用逗号连接,在本例中为空字符串

您可以通过在某些对象上重写
toString
并查看更改的结果来验证这一点:

var a = [];
a.toString = function() { return "foo"; };
console.log(0 + a);

这将产生
“0foo”

+[[]]
-有一元运算符

一元+运算符将其操作数转换为数字类型。一元运算符将其操作数转换为数字类型,然后求反

您的表达式显然是
+[[]]
加上
[[]]
其中,由于二进制
+
运算符,将“[]]”转换为空字符串


因此是
0+'='0'
+[[]]
-有一元运算符

一元+运算符将其操作数转换为数字类型。一元运算符将其操作数转换为数字类型,然后求反

您的表达式显然是
+[[]]
加上
[[]]
其中,由于二进制
+
运算符,将“[]]”转换为空字符串


因此,第一个是一元加号,第二个是二元加号。不要混淆这些。javascript很奇怪。这能回答你的问题吗?:)@赞成:字符串从哪里来的?第一个是一元加号,第二个是二元加号。不要混淆这些。javascript很奇怪。这能回答你的问题吗?:)@赞成者:绳子是从哪里来的?