Javascript--等性运算符
判断两个变量是否相等是程序设计中非常重要的运算,若是对原始值进行运算,则比较简单,但涉及到对象,则有点复杂.
ECMAScript提供了两套运算符处理这个问题:
- 等号和非等号处理原始值
- 全等号和非全等号处理对象
1.等号和非等号
等号由==表示.当且仅当两个运算数相等时,才返回true.
非等号由!=表示.当且仅当两个运算数不相等时,它返回false.
为了确定运算数是否相等,这两个运算符都会进行类型转换.类型转换基本规则如下:
- 如果一个运算数是Boolean值,在检查相等性之前,会把它转换成数字值.true转换为1,false转换为0.
- 如果一个运算数是数字,另一个运算数是字符串,则尝试将字符串转换为数字.
- 如果一个运算数是数字,另一个运算数是对象,则尝试将对象转换为数字.
- 如果一个运算数是字符串,另一个运算数是对象,则尝试将对象转换为字符串.
- 不能将null和undefined转换成其他类型值.
运算符在进行比较时,遵循以下规则:
- 值null与undefined相等
- 如果某个运算数是NaN,等号返回false,非等号返回true.即使两个运算数都是NaN,等号仍返回false
- 如果两个运算数都是对象,则比较的是它们的引用值.
对一些特殊值进行比较,前提代码:
function display(value){ document.write(value+"<br/>"); } var obj1 = new Object(); var obj2 = new Object(); var obj3 = obj1;
结果:
比较式 结果 1=="1" true 1==false false 1==true true 2==true false null==undefined true 1==NaN false NaN==NaN false NaN!=NaN true obj1==obj2 false obj1==obj3 true
2.全等号和非全等号
全等号由===表示.只有在无需类型转换运算数的情况下,才返回true.
非全等号由!==表示.
例子,前提代码:
function display(value){ document.write(value+"<br/>"); } var obj1 = new Object(); var obj2 = new Object(); var obj3 = obj1;
结果:
比较式 结果 1==="1" false 1===false false 1===true false 2===true false null===undefined false 1===NaN false NaN===NaN false NaN!==NaN true obj1===obj2 false obj1===obj3 true