var x= 1;
Number.prototype.test = function () { return this };
x.test() === x.test() // false
为什么===
测试返回false?
答案 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)
当我们检查===
运算符时,它将检查相同类型的对象。
这里,问题可能是因为不同的对象创建。