假设一个简单的样本
let a = [] + [];
在这种情况下,两个[]
都转换为空字符串,因此结果a
也是空字符串。
现在,例如,
let a = null + "";
这将a强制为"null"
。
在以上两个示例中,似乎+运算符将参数转换为字符串(否则null + ""
应该返回0)。
但如果我们这样做
let a = null + null;
实际上应该是a
的{{1}}的值实际上是"nullnull"
,所以我的问题是让a = null +“”;的类型顺序是什么JS?
答案 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。