javascript运算符之相等与严格相等

来源:互联网 发布:jboss 1099端口 编辑:程序博客网 时间:2024/05/17 08:34

例:

     var a=[1,2,3];

     var b=[1,2,3];

     var c=a;

     var result=[a==b,a==c,a==a];

看到上述代码,你认为result的结果是什么?[true,true,true]?但是,令我们大跌眼镜的是result的结果为[false,true,true]。

这又是为什么呢?

因为javascript中对象的比较引用的比较,而不是值的比较,所以a==c为真,a==b为假。也就是说,对象只和其本身是相等的,与其它任何对象都不相等。所以,a==a也为true。

接下来,我们来详细说说严格相等运算符===。

在执行严格相等运算(===)时,首先会计算操作符的值,然后比较这两个值(即使类型不一致也不会进行转换)。

(1).如果两操作数的类型不同,则不相等;

(2).操作数中只要出现NaN,则不相等;

(3).二者都为null或undefined,则相等;一方为null,一方为undefined,则不相等;

(4).操作数都为true或false时,则相等;

(5).操作数都为数字,且数值相等时,则相等;并且-0===0为true;

(6).操作数都为字符串,且各个位上的字符都相等时,字符串相等;

(7).两个引用指向同一个对象、函数或数组时,则相等。

相等运算符(==),它的比较并不严格,当操作数的类型一致时,它会按照严格相等的规则进行比较,但当操作数的类型不一致时,它会尝试进行类型转换。

(1).一个是null,一个是undefined时,则相等;

(2).一个值是字符串,一个值是数字时,会首先将字符串转换为数字,然后用转换之后的值进行比较;

(3).如果其中的一个操作数为true或false,则会将其先转换为1或0再比较;

(4).如果一个值为对象,另一个值为数字或是字符串,则会先将对象转换为原始值,再进行比较;

(5).其它不同类型之间的比较均为不相等。

那现在再看一个判断相等的结果:“true”==1,结果为true或false呢?

仔细想想,其实结果为false。字符型的true并不能转换为一个数字,所以结果就会返回一个NaN。


0 0
原创粉丝点击