为什么Math.sign([])= 0,Math.sign([20])= 1和Math.sign([20,30,40])= NaN?

时间:2019-10-26 09:03:33

标签: javascript

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

1 个答案:

答案 0 :(得分:8)

期望将被传递一个数字。如果将非本原语传递给它,它将尝试首先将该非本原语转换为数字。

当数组转换为数字时,它们的值首先由,连接以创建字符串,然后解释器尝试将该字符串转换为数字。因此,

Math.sign([]);

将空数组转换为空字符串,然后将其转换为数字-并且Number('')为0,因此结果为0。

使用[20],将其连接到字符串'20'中,然后将其转换为数字20,其符号为正。

通过[20, 30, 40],它被合并到'20,30,40'中,该数字不能转换为数字:

console.log(Number('20,30,40'));

所以输出为NaN

当您不确定100%隐式类型强制转换的结果时,最好始终执行显式类型转换。