javascript类型转换顺序由什么决定



假设一个简单的样本

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。

最新更新