Math.sign()
按照https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign接受数字参数或数字作为字符串,为什么它给出以下结果,以及在给出这些结果时如何进行内部转换?
console.log(Math.sign([])); // 0
console.log(Math.sign([20])); // 1
console.log(Math.sign([20, 30, 40])) // NaN
答案 0 :(得分:8)
期望将被传递一个数字。如果将非本原语传递给它,它将尝试首先将该非本原语转换为数字。
当数组转换为数字时,它们的值首先由,
连接以创建字符串,然后解释器尝试将该字符串转换为数字。因此,
Math.sign([]);
将空数组转换为空字符串,然后将其转换为数字-并且Number('')
为0,因此结果为0。
使用[20]
,将其连接到字符串'20'
中,然后将其转换为数字20
,其符号为正。
通过[20, 30, 40]
,它被合并到'20,30,40'
中,该数字不能转换为数字:
console.log(Number('20,30,40'));
所以输出为NaN
。
当您不确定100%隐式类型强制转换的结果时,最好始终执行显式类型转换。