Javascript:Number的原型

时间:2010-03-08 10:43:02

标签: javascript prototype numbers

var x= 1;  
Number.prototype.test = function () { return this };  
x.test() === x.test() // false  

为什么===测试返回false?

3 个答案:

答案 0 :(得分:3)

因为this将是一个Number对象,而不是原始的原始数字值,并且比较两个同等创建的对象将始终返回false:

{"test":"Hello"} === {"test":"Hello"} // false

// Check the typeof your vars
var x= 1;  
Number.prototype.test = function () { return this };  
x.test() === x.test() // false 
alert("x is a "+typeof(x)+", x.test() is an "+typeof(x.test()));

如果您正在寻找解决方案,请将this投射到数字

var x= 1;  
Number.prototype.test = function () { return +this };  
x.test() === x.test() // TRUE!
alert("x is a "+typeof(x)+", x.test() is also a "+typeof(x.test()));

答案 1 :(得分:1)

每当你调用.test()时,就会创建一个新的Number实例,这是非常期待的行为,每个拳击解决方案都是这样运作的。您可以在C#和Java中尝试相同的操作,并获得完全相同的结果。 (好吧,Java有小数字的Integer对象池,所以你不会得到完全相同的结果)

答案 2 :(得分:0)

当我们检查===运算符时,它将检查相同类型的对象。

这里,问题可能是因为不同的对象创建。