50 === 50: false. 50 == 50: true?

15 浏览
0 Comments

50 === 50: false. 50 == 50: true?

我完全不知所措。

我有一个函数..

Number.prototype.abs = function () {
    return this >= 0 ? this : this * -1;
};

..它返回一个数的绝对值..

(50).abs(); // 50
(-50).abs(); // 50

..但比较结果不正确..

(50).abs() === 50; // False

..有时候。

(50).abs() == 50; // True
(-50).abs() === 50; // True

问题在于,它在Chrome 12和Firefox 4中运行良好,但在IE 9、Safari 5和Opera 11中不行。

我没有发现代码中有任何问题,而且因为它在Chrome和Firefox中工作正常,所以这是与浏览器有关的问题,但我不知道是什么问题。

更新:与浏览器有关的差异在于严格模式的支持。我在严格模式下运行我的代码,这引入了一些改变,使得我的代码能够正常工作。之所以在某些浏览器中失败,是因为它们的严格模式不完整或缺失。

为什么会返回false?

0