下面的代码段解释了这个问题
//Outside array
console.log(String(undefined)); //undefined
console.log(String(null)); //null
console.log(String(5.55)); //5.55
//inside array
console.log(String([undefined])); // ""
console.log(String([null])); // ""
console.log(String([5.55])); //5.5
为什么null
和undefined
在数组内外转换为字符串时显示不同的行为。
答案 0 :(得分:4)
将数组隐式强制转换为字符串时,它将在数组上调用.join(,)
:
15.4.4.2 Array.prototype.toString ( )
- 让func是使用参数“ join”调用数组的[[Get]]内部方法的结果。
.join
方法专门强制将null和undefined强制为空字符串:
15.4.4.5 Array.prototype.join (separator)
- 如果element0未定义或为null,则将R设为空String;否则,使R为ToString(element0)。
使用undefined
或null
以外的其他值时,元素将只调用toString
。
换句话说,null
和undefined
是仅将元素强制为字符串的通常规则的两个特殊例外。
答案 1 :(得分:2)
String([])
等效于[].toString()
。 toString()
方法的作用是使用逗号join()
个元素。
null
,undefined
,根据定义将它们转换为空字符串。
如果元素未定义或为null,则将其转换为空字符串。