一、关系运算符
比较运算符
大于(>)、小于(<)、大于等于(>=)、小于等于(<=)这几个关系运算符用于对两个值进行比较。这几个运算符都返回一个boolean值,如下例所示:
var result = 5>3; //true
var result2 = 5<3; //false
与在JavaScript中的其他运算符一样,当关系运算符的操作数是非数值时,也要进行数据转换或完成某些神奇操作。看下列规则:
- 如果两个数都是数值,则进行数值比较
- 如果两个操作数都是字符串,则比较两个字符串对应的Unicode字符编码值
- 如果一个操作数是数值,则将另一个操作数转换为数值,然后进行数值比较
- 如果一个操作数是对象,则调用这个对象的valueOf方法/toString()方法,用得到的结果按照前面的规则进行比较
- 如果一份操作数是布尔值,,则先将其转换为数值,然后再进行数值比较
举几个例子:
var result2 = "29" < "3"; //比较的是字符编码,2的字符编码是“50,而3的字符编码是是“51”
console.log(result2); //true
var result2 = "29" < "3"; //比较的是字符编码,2的字符编码是“50,而3的字符编码是是“51”
console.log(result2); //true
var result3 = "a" < 3; //因为"a"无法被转换为数值,所以被转换为NaN
console.log(result3); //false
var result4 = NaN < 3;
console.log(result4) //false
var result5 = NaN >= 3;
console.log(result5); //false
相等运算符
在JavaScript中有两组相等运算符:相等和不相等、全等和不全等
1.相等和不相等
JavaScript中的相等运算符有两个等于号(==)表示,如果两个操作数相等,就返回true,否则,但会false。
JavaScript中的不相等运算符用叹号后面加一个等于号(!=)表示,如果两个操作数不想等,就返回true,否则,返回false。
这两种类型都会先转换操作数(通常为强制转型),然后再比较它们的相等性。
在转换不同数据类型时,相等和不相等运算符遵循以下规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,true转换为1;
- 如果有一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值,再进行比较
- 如果有一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值进行比较
- null和undefined是相等的
- 如果有一个操作数是NaN,则相等运算符返回false,而不相等运算符返回true。即使两个操作数都是NaN,相等运算符返回false,按照规则,NaN不等于NaN
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则返回true,否则,返回false
2.全等和不全等
全等运算符使用三个等于号(===)表示。
不全等运算符使用一个叹号加两个等于号(!==)表示。
举几个例子:
var result = ("55" == 55);
var result2 = ("55" === 55);
console.log(result); //true
console.log(result2); //false
var result3 = ("55" != 55);
var result4 = ("55" !== 55);
console.log(result3); //false
console.log(result4); //true
全等、不全等和相等、不相等的区别:
全等、不全等比较内容还比较数据类型。
相等不相等只比较内容,不比较数据类型。
二、逻辑运算符
逻辑运算符分为逻辑与(&&)、逻辑或(||)、逻辑非(!),三种运算符的返回值都是布尔值。
1. 逻辑与(&&)
逻辑与(&&)真值表
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
逻辑与运算可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与遵循以下规则:
- 如果第一个操作数是对象,则返回第二个操作数。
- 如果第二个操作数是对象,则只有第一个操作数的求值结果为true的情况下才会返回该对象。
- 如果两个操作数都是对象,则返回第二个操作数。
- 如果第一个操作数是null,则返回null。
- 如果第一个操作数是undefined,则返回undefined。
- 如果第一个操作数是NaN,则返回NaN。
逻辑与是短路操作,即如果第一个数能够决定结果,那么就不再对第二个数进行求值。对于逻辑与而言,如果第一个操作数是false,则无论第二个数是什么值,结果都不可能是true。
2. 逻辑或(||)
逻辑或(||)真值表:
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
与逻辑与很类似,逻辑或遵循以下规则:
- 如果第一个操作数是对象,则返回第一个操作数。
- 如果第一个数的求值结果为false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果两个操作数都是null,则返回null
- 如果两个操作数都是undefined,则返回undefined
- 如果两个操作数都输NaN,则返回NaN
与逻辑或也是短路运算符。也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数进行求值了。
3. 逻辑非(!)
无论这个值是什么数据类型,这个运算符都会返回一个布尔值,逻辑非运算符首先会将它的操作数转换为一个布尔值,然后对其进行求反。
举几个例子:
console.log(!false); //true
console.log(!"blue"); //false
console.log(!0); //true
console.log(!NaN); //true
console.log(!''); //true
console.log(!1234); //false