为什么 (+ + '') === 0?

3

请问有人可以解释一下这个奇怪的JavaScript行为吗?

+
// Rightfully gets a syntax error, because there are no operands

+ +
// Same as above

+ + ''
// Interpreted as 0

typeof(+ + '')
// Interpreted as "number"

+ + '' === 0
// Interpreted as true

换句话说,(+ + '')计算结果为零。1)这在语法上是如何允许的?2)为什么会得出零的结果?

1
+ 是一元加运算符,将某个值转换为数字。 +"" 等同于 Number(""),其结果为 0 - Ian
1
运算符具有指定的行为。运算符对操作数进行操作。JavaScript是弱类型语言。当运算符对一个给定运算符的有效操作数进行操作时,如果需要,它将执行类型强制转换并执行其操作。因此,唯一剩下的问题是特定运算符在操作特定类型的操作数时如何行为。这在规范文档以及互联网上的许多其他资源中都有很好的记录。 - user2437417
2
有点让你欣赏强类型。 - Robert Harvey
学习这样六个令人困惑的比较,是我们为了避免输入每一个小东西而付出的代价。 - dandavis
1个回答

7

这应该是字符串类型,因为我在附加一个空字符串。typeof(0 + '') === "string" - carlbenson
1
@carlbenson:没有追加/连接。 +(+("")) 如果你有这个,情况就不同了 "" + + "",它将是 (""+(+("")))。在这里查看JS运算符的优先级和结合性:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FOperators%2FOperator_Precedence - user2437417

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接