我试图检测一个数字在数字原型中的函数中是否为负数。对于语法糖,我使用的是“.”若要将数字转换为对象,请执行以下操作。但当我评估一个负数时,结果却是一个正数:
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有人知道为什么会发生这种事吗?谢谢。:)
发布于 2015-10-24 08:26:55
根据MDN算子优先性,成员访问操作符(.)具有第二最高优先级,一元否定位于第5位。
由于.运算符比一元否定具有更高的优先级,因此表达式的计算实际上如下所示
-(11..test())因此,test的结果实际上是一元否定的。你可以确认,就像这样
console.log(-11..test());
// -11要获得预期的结果,需要用括号(优先级最高的操作符)对数字进行包装,如下所示
(-11).test()现在,首先对-11进行评估,并对结果调用test,即-11本身。
发布于 2015-10-24 08:22:58
作为运算符,一元减号的优先级低于.。
(-11).test();https://stackoverflow.com/questions/33316037
复制相似问题