示例:
let a = [1, 2]
console.log(a * 2); // NaN, this isn't Python
a = [3];
console.log(a); // an array, as expected: [3]
console.log(a * 2); // 6!
这在实践中对于Headers对象很有用,该对象通常包含1个元素的数组:
// calculate when an API will reset its rate limit
new Date(response.headers['x-rate-limit-reset'] * 1000)
但是为什么有效?
答案 0 :(得分:2)
这是因为在乘法(*
)type conversion
期间发生:
console.log(Number([1, 2])); // NaN
console.log(Number([2])); // 2
注意:在转换为Number
之前,JavaScript会尝试将数组转换为String
,这样会产生逗号分隔的值,例如'1,2'
和{{1} }。然后,当JavaScript尝试将这些字符串转换回'2'
(因为我们将它们相乘)时,Number
产生'1,2'
,而NaN
得到的转换就很好。
亲自看看:
'2'
有关更多信息,请参见this。
答案 1 :(得分:1)
当数组位于需要基本值的表达式中时,将调用其toString
方法。对于数组,这基本上是arr.join(',')
。包含逗号的字符串不能转换为数字:
let a = [1, 2]
console.log(a * 2); // doesn't work
console.log('1, 2' * 2) // same string result: also doesn't work
console.log([1, 2].toString() === '1,2');
但是当在具有一个元素的数组上调用join(',')
时,没有逗号,因此结果 可以转换为数字并乘以*
。 / p>
console.log([3].toString());
console.log([3, 4].toString());
console.log(isNaN([3].toString()));
console.log(isNaN([3, 4].toString()));
答案 2 :(得分:1)
这与JavaScript的相同性有关。
查看此页面以获取完整的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
可能会发生很多自动转换:)
这是一个奇怪/有趣的人:
console.log([1, 2] == '1,2')
所以可以这样解释:
console.log([6] == '6');
console.log([6] == 6);
console.log([6] * '7');
*
是一个数学运算符,它尝试将所有内容都转换为数字!可以将[6]
强制转换为6
,就像将'7'
强制强制转换为7
一样!
答案 3 :(得分:1)
您可以在这里找到完整的答案: Official specification: ToNumber