我理解类型强制和类型转换的概念,但它们没有阐明为什么空字符串为零。不是 NaN,而是零。
console.log(Number('')) // 0
我能找到的唯一解释是空字符串是 falsy 值的一部分,但它仅涵盖布尔上下文。
这个 MDN 文档页面 指出“空字符串为零”这一事实,以及 语言规范 (如果我没猜错的话)。
这种行为有什么理由或更深层次的含义吗?
JS 是一种非常松散的类型语言,因此当两种不同的类型在数学表达式中相遇时,JS 会非常努力地将它们强制转换为数字,即使这看起来很奇怪。我的猜测是,由于
''
是假的,因此它可以转换为 false
,很容易表示为 0
。我猜 Number(' ')
看起来更奇怪,但这就是我们在语言规范中的内容🤷u200d♂️:
console.log(Number(' '))
也许就是这样一个:https://tc39.es/ecma262/multipage/abstract-operations.html#sec-runtime-semantics-stringnumericvalue