Javascript:数字的原型

Javascript:数字的原型,javascript,prototype,numbers,Javascript,Prototype,Numbers,为什么==测试返回false?每次调用.test()都会创建一个新的Number实例,这是人们期望的行为,每个装箱解决方案都是这样工作的。您可以在C#和Java中尝试同样的方法,得到完全相同的结果。(好吧,Java有一个整数对象池,用于小数字,因此您不会得到完全相同的结果)因为这将是一个数字对象,而不是原始的原语数字值,比较两个同样创建的对象将始终返回false: var x= 1; Number.prototype.test = function () { return this };

为什么
==
测试返回false?

每次调用
.test()
都会创建一个新的Number实例,这是人们期望的行为,每个装箱解决方案都是这样工作的。您可以在C#和Java中尝试同样的方法,得到完全相同的结果。(好吧,Java有一个整数对象池,用于小数字,因此您不会得到完全相同的结果)

因为
这将是一个数字对象,而不是原始的原语数字值,比较两个同样创建的对象将始终返回false:

var x= 1;  
Number.prototype.test = function () { return this };  
x.test() === x.test() // 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()));

当我们检查
==
操作符时,它将检查相同类型的对象


在这里,问题可能是由于不同的对象创建

尝试输出它返回的值(例如,通过console.log或alert,不知道您的上下文)。是的,我不知道这会有什么帮助,但这是一个开始。@eugene:语法错误(每个代码块中缺少右括号)的好地方。感谢编辑:)比较对象总是返回false?这太难看了。。。那么,如何检查两个对象是否相同?@Bart:很好,我的意思是,与同样创建的对象进行比较将返回false。
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()));