等性运算符一般用在判断两个变量是否相等的运算。在处理原始值时,这种运算相当简单,涉及对象,任务就稍有点复杂。
性运算符分:
1、等号和非等号用于处理原始值
2、全等号和非全等号用于处理对象
一、等号和非等号(比较值)
在 ECMAScript 中,
1、等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。
2、非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的规则如下:
1、如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1
2、如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字
3、如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串
4、如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字
来点栗子说事儿:
一、如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1
console.log(false == 0);//true
console.log(true == 1);//true
console.log(false == 1);//false
console.log(true == 0);//false
console.log(false != 0);//false
console.log(true != 1);//false
console.log(false != 1);//true
console.log(true != 0);//true
二、如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字
console.log("12" == 12);//true
console.log("12" != 12);//false
三、如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串
var obj = ['a']
var str = "a"
console.log(obj.toString());//a -> 转换为字符串之后变成a
console.log(obj == str);//true
console.log(obj != str);//fasle
四、如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字
var obj = ['12']
var Num = 12;
console.log(Number(obj));//12 -> 转换为数字之后变成12
console.log(obj == Num);//true
在比较时,该运算符还遵守下列规则:
1、值 null 和 undefined 相等
2、在检查相等性时,不能把 null 和 undefined 转换成其他值
3、如果某个运算数是 NaN,等号将返回 false,非等号将返回 true
4、如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等
我们的好朋友,栗子同志来了:
一、值 null 和 undefined 相等
var a = '';
console.log(a.innerHTML);//undefined
console.log(null == a.innerHTML);//true
console.log(null != a.innerHTML);//fasle
二、在检查相等性时,不能把 null 和 undefined 转换成其他值
这个就理解字面意思就行了,我不知道怎么给你们找例子了,CGL对不起大家了。
三、如果某个运算数是 NaN,等号将返回 false,非等号将返回 true
console.log(NaN == null);//false
console.log(NaN == undefined);//false
console.log(NaN == NaN);//false
console.log(NaN == 0);//false
console.log(NaN != 0);//true
四、如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等
例子有点不切当,大家将就看看吧,大概意思是这样的。
var fn1 = function(){console.log('我是fn1')};
var fn2 = fn1
var fn3 = function(){fn1()}function(){ //跟单:www.gendan5.com
fn1()
fn2()
fn3()
console.log(fn1 == fn2);
console.log(fn2 == fn3);
var fn4 = [1,2,3];
var fn5 = [1,2,3];
console.log(fn4 == fn5);
二、全等号和非全等号(比较值和类型)
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。
1、全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。
2、非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。
var num1 = 30;
var num2 = 30;
var str = "30";
console.log(num1 === num2);//true -> 值一样,类型都是数字
console.log(num1 === str);//false -> 值一样,类型是数字和字符串
console.log(NaN === NaN);//false -> 直接false,硬记
console.log(num1 != str);//false -> 类型不一样,但是值一样
console.log(NaN != NaN);//true -> 直接true,硬记
console.log(NaN !== NaN);//true -> 直接true,硬记
console.log(num1 !== num2);//false -> 值和类型都一样
其他的看《等号和非等号》就可以。