JS 操作符
一、相等操作符
1. 相等和不相等(== 和 !=)
转型规则如下:
1. 如果两个操作数是不同类型的,就会尝试在比较之前将它们转换为相同类型:
- null == undefined 比较结果为`true`,因为不能将null和undefined强制转换成其他任何值;
- 字符串和数值比较时,会先将字符串转换成数值,在做比较;
- 如果操作数之一是布尔值,则将布尔操作数转换为1或0——false为0,true为1;
- 如果操作数之一是对象,另一个是数字或字符串,会使用对象对应的valueOf或toString方法将对象转换为基本类型
值,接着按之前的规则比较;
2. 如果操作数具有相同的类型,则将它们进行如下比较:
- 如果两个操作数都是字符串字面量,则仅当两个操作数具有相同顺序的相同字符时才返回true;
- 如果两个操作数都是数值,则仅当两个操作数具有相同的值时才返回true,+0并被-0视为相同的值;
- 如果两个操作数都是布尔值,则仅当操作数为两个true或两个false比较时才返回true;
- 如果两个操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true;
注意:
1. NaN == NaN 比较结果为false,NaN不等于NaN;
// NaN(not a number译为非数值),这是一个特殊的数值
typeof NaN // 'number'
typeof 12 // 'number'
// 从结果可以看出NaN为一个number类型
示例:
// 1.两个操作数是不同类型:
'1' == 1 // true, 字符串1先转换成数值——1,再比较
0 == false // true, 布尔值false先转成——0,再比较
const number1 = new Number(3)
number1 == 3 // true, number1对象调用valueOf方法后得到原始值,再比较
const string1 = "hello";
const string2 = new String("hello");
string1 == string2 // true,string2对象调用toString方法后得到原始值,再比较
2. 全等和不全等(=== 和 !==)
与相等和不相等不同的是,全等和不全等在比较之前不会对操作数做强制转型操作,其他比较规则与相等和不相等操作符的规则相同,也就是全等和不全等的比较规则是相等和不相等比较规则的删减版
// 例子
var res1 = ('55' == 55) // true
var res2 = ('55' === 55) // false
注意:null === undefined 比较结果为
false