决定JavaScript类型转换顺序的因素是什么?

时间:2018-10-27 18:19:09

标签: javascript

假设一个简单的样本

let a = [] + [];

在这种情况下,两个[]都转换为空字符串,因此结果a也是空字符串。

现在,例如,

let a = null + "";

这将a强制为"null"

在以上两个示例中,似乎+运算符将参数转换为字符串(否则null + ""应该返回0)。

但如果我们这样做

let a = null + null;

实际上应该是a的{​​{1}}的值实际上是"nullnull",所以我的问题是让a = null +“”;的类型顺序是什么JS?

2 个答案:

答案 0 :(得分:0)

null +“”返回“ null”,因为null被转换为字符串。

在第二个示例中,由于没有必要,它不会转换为字符串(该分配中不包含字符串)

而是将null转换为数字(为0) 所以a = 0 + 0

强制类型的顺序由方括号或从左至右定义。

e.g 
1) "" + null + null // "nullnull"
2) "" + (null + null) // "0"
3)  null + null + "x" // "0x"
4) "x" + null + null // "xnullnull"

答案 1 :(得分:0)

如果表达式中的任何操作数都可转换为字符串,则+运算符将进行字符串连接(并将所有其他操作数转换为字符串)。如果没有操作数可转换为字符串,则+运算符将对数字进行加法运算。

在您的第一个示例中,空数组是可憎的并且可转换为字符串,因此[] + []产生""。就像您执行[1, 2] + [3, 4]给您"1,23,4"一样,将数组强制转换为字符串会产生一个逗号分隔的元素列表。

您的第二个示例具有空字符串和null的方式正在工作,因为表达式中包含字符串,因此所有其他操作数(在这种情况下为null)都将转换为字符串。

第三个添加两个null的示例为您提供0,因为表达式没有可转换为字符串的操作数,因此发生了数字加法,并且因为将null转换为数字会产生0,因此0 + 0 = 0。