假设一个简单的样本
let a = [] + [];
在这种情况下,两个[]
都被转换为空字符串,因此结果a
也是空字符串。
现在,以为例
let a = null + "";
这将强制a为"null"
。
从上面的两个示例来看,+运算符似乎将参数转换为字符串(否则null + ""
应该返回0(。
但如果我们做
let a = null + null;
a
的值,应该是"nullnull"
,实际上是0
,所以我的问题是类型let a=null+"的顺序是什么;在JS中?
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"
如果表达式中的任何操作数可转换为字符串,则+运算符将进行字符串串联(并将所有其他操作数转换为字符串(。如果没有可转换为字符串的操作数,那么+运算符将进行数字加法运算。
在您的第一个示例中,空数组是一个aboject,可转换为字符串,因此[] + []
产生""
。就像您这样做一样,[1, 2] + [3, 4]
会给您"1,23,4"
,因为将数组转换为字符串会产生一个逗号分隔的元素列表。
第二个使用空字符串和null的例子是这样工作的,因为表达式中有一个字符串,所以所有其他操作数(在本例中为null(都会转换为字符串。
添加两个null的第三个例子是给你0,因为表达式没有可转换为字符串的操作数,所以会进行数字加法,并且因为将null转换为数字会产生0,所以0+0=0。