There seems与普遍理解之间的不匹配==
以及它的实际作用。给出这个问题的一些背景:
typeof new Number(1); // returns object
typeof new String(1); // returns object
typeof 1; // returns number
看来,两者Number
and String
are of object
类型。这并不奇怪。然而事情变得有趣了==
应该返回true
当操作数相等时不管他们的类型。
根据a somewhat权威描述 https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators:
运营商试图
将对象转换为原始值、字符串或数字值,
使用对象的 valueOf 和 toString 方法。如果这个尝试
转换对象失败,会生成运行时错误。
简而言之,==
应该通过对象的原始值来比较对象。出奇:
var numa = new Number(1);
var numb = new Number(1);
var stri = new String(1);
numa.toString() == stri.toString(); // returns true, as expected
numa.valueOf() == stri.valueOf(); // returns true, as expected
numa == stri; // returns false (?!)
numa == numb; // returns false (?!!!)
numa == numa; // returns true, as expected
var numx = 1;
numa == numx; // returns true (?)
numb == numx; // returns true (?)
stri == numx; // returns true (?)
当两个操作数都是对象时,就会出现==
操作员都不使用toString()
nor valueOf()
但还有别的事。
对象相等的标准定义是什么==
?
我相信你在那里看到的,以及“有点权威的描述”中遗漏的,是==
当且仅当其比较数是基元时,尝试将对象转换为基元。如果两个操作数都是对象,则将它们作为对象进行比较,并且仅当它们是相同的对象(即相同的实例 - 具有相同属性的不同对象是不同的,正如您在numa == numb
case).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)