Kar*_*rol 1 javascript function
在这段代码中,我定义了两个函数,将它们及其字符串表示形式输出到控制台,并对它们进行比较:
var a = function func() {},
b = function func() {};
// string representations are equal
console.log(a.toString());
console.log(b.toString());
console.log(a.toString() == b.toString());
console.log(a.toString() === b.toString());
// functions seem to be equal
console.log(a);
console.log(b);
// but they're not really as this prints false
console.log(a == b);
console.log(a === b);
Run Code Online (Sandbox Code Playgroud)
为什么它们不相等?
当然,空的普通对象也会发生同样的情况,即{}.
但有趣的是,lodash在这种情况下isEqual返回:在这种情况下:。当然这不是什么证明,只是平等的实现方式。true_.isEqual({}, {});false_.isEqual(function () {}, function () {})
函数只不过是对象,所以这一切都回到了两个对象的比较,然后根据MDN:
\n\n\n\n\n如果操作数类型不同,则相等运算符会对其进行转换,然后应用严格比较。如果两个操作数都是对象,则当操作数引用内存中的同一对象时,JavaScript 会比较相等的内部引用。
\n
ECMAScript\xc2\xae 语言规范中还描述了完整的相等比较算法,并且 1.f 是显而易见的:
\n\n\n\n\n如果 x 和 y 引用同一个对象,则返回 true。否则,返回 false。
\n
因此,根据设计,对象总是使用引用进行比较,引用是一种指向内存中地址的指针。如果指向相同,则返回true,否则false产生。