关于javascript两个空数组比较

作者:norion时间:2013年9月10日评论次数:0 条

如下代码:

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个都是未定义的,那么它们相等。

标签:

上一篇: 简单的php生成随机字符串

下一篇:php格式化时间函数

相关文章

评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注