使用文字符号丢失负数
Negative number is lost using literal notation
我正在尝试检测 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
有人知道为什么会这样吗?谢谢。 :)
作为运算符,一元减号的优先级低于 .
。
(-11).test();
根据MDN's Operator Precendence,成员访问运算符 (.
) 具有第二高的优先级,一元否定出现在位置 5。
由于.
运算符的优先级高于一元取反,表达式实际上是这样计算的
-(11..test())
所以,test
的结果实际上是试图被一元取反。你可以确认一下,像这样
console.log(-11..test());
// -11
要得到预期的结果,需要用括号(优先级最高的运算符)将数字括起来,像这样
(-11).test()
现在,-11
将首先被评估,test
被调用在结果上,即 -11
本身。
我正在尝试检测 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
有人知道为什么会这样吗?谢谢。 :)
作为运算符,一元减号的优先级低于 .
。
(-11).test();
根据MDN's Operator Precendence,成员访问运算符 (.
) 具有第二高的优先级,一元否定出现在位置 5。
由于.
运算符的优先级高于一元取反,表达式实际上是这样计算的
-(11..test())
所以,test
的结果实际上是试图被一元取反。你可以确认一下,像这样
console.log(-11..test());
// -11
要得到预期的结果,需要用括号(优先级最高的运算符)将数字括起来,像这样
(-11).test()
现在,-11
将首先被评估,test
被调用在结果上,即 -11
本身。