关于javascript两个空数组比较

作者:沙师弟时间:2013-09-11
如下代码:
console.log( [] == ![] ); //false
你觉得答案是什么?为什么呢?我想这个应该会难倒不少人,今天我也被这摆了一道,大家以后在比较对象的时候不能直接比较,记住js是弱语言。 关于上面的问题,是这样的js是这样解释代码的,js先将类型不同的类型转换成相同的类型,“[]”的类型“object”,而“![]”的类型是“boolean”:
console.log( Boolean([]) == Boolean(![]) ); //false
如果是:
console.log( [] == [] ); //false
那又是为什么呢?这就不能遵循上面例子的原则,因为“==”两边是不同对象:
var a = [];
console.log( a == a ); //false
那么上面例子是遵循了js对于“==”比较的原则,在使用“==”比较时,要注意遵循下面的原则: 1、当两个运算数的类型不同时,将它们转换成相同的类型: 1)一个数字与一个字符串,字符串转换成数字之后,进行比较。 2)true转换为1、false转换为0,进行比较。 3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值,然后进行比较(先使用valueOf,如果不行就使用toString)。 2、当两个运算数类型相同,或转换成相同类型后: 1)2个字符串:同一位置上的字符相等,2个字符串就相同。 2)2个数字:2个数字相同,就相同。如果一个是NaN,或两个都是NaN,则不相同。 3)2个都是true,或者2个都是false,则相同。 4)2个引用的是同一个对象、函数、数组,则它们相等,如果引用的不是同一个对象、函数、数组,则不相同,即使这2个对象、函数、数组可以转换成完全相等的原始值。 5)2个null,或者2个都是未定义的,那么它们相等。