使用文字表示法丢失负数

时间:2015-10-24 08:19:37

标签: javascript numbers negative-number

我正在尝试检测Number原型中函数内的数字是否为负数。对于语法糖,我使用“..”将数字转换为对象。但是,当我评估一个负数时,它结果是一个积极的数字:

Number.prototype.test = function() {
    n = this.valueOf();
    console.log(n);
    console.log(typeof n);
    return n;
};

-11..test()
// 11 - why???
// number
// -11

如果我使用Number对象,结果是预期的结果:

Number(-11).test()
// -11
// number
// -11

有人知道为什么会这样吗?谢谢。 :)

2 个答案:

答案 0 :(得分:3)

根据MDN's Operator Precendence,成员访问运算符(.)具有第二高优先级,并且一元否定位于第5位。

由于.运算符的优先级高于一元否定,因此表达式实际上是按此计算的

-(11..test())

因此,test的结果实际上是被一元否定的。您可以像这样确认

console.log(-11..test());
// -11

要获得预期结果,您需要用括号(具有最高优先级的运算符)包装数字,如下所示

(-11).test()

现在,我们将首先评估-11,并在结果上调用test-11本身。

答案 1 :(得分:1)

作为运算符,一元减号的优先级低于.

(-11).test();