JS--操作符

101 阅读2分钟

JS 操作符

一、相等操作符

1. 相等和不相等(== 和 !=)

转型规则如下:

1. 如果两个操作数是不同类型的,就会尝试在比较之前将它们转换为相同类型:
   - null == undefined 比较结果为`true`,因为不能将nullundefined强制转换成其他任何值;
   - 字符串和数值比较时,会先将字符串转换成数值,在做比较;
   - 如果操作数之一是布尔值,则将布尔操作数转换为10——false0true1;
   - 如果操作数之一是对象,另一个是数字或字符串,会使用对象对应的valueOf或toString方法将对象转换为基本类型
   值,接着按之前的规则比较;
2. 如果操作数具有相同的类型,则将它们进行如下比较:
   - 如果两个操作数都是字符串字面量,则仅当两个操作数具有相同顺序的相同字符时才返回true;
   - 如果两个操作数都是数值,则仅当两个操作数具有相同的值时才返回true,+0并被-0视为相同的值;
   - 如果两个操作数都是布尔值,则仅当操作数为两个true或两个false比较时才返回true;
   - 如果两个操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true

注意:

1. NaN == NaN 比较结果为falseNaN不等于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