学习笔记: JS运算符 — 关系运算符
Time: 10-03-2 Comments: 0
一. == 和===
- 1. 这两个运算符都接受任意类型的运算数,比较数字,字符串和布尔值时,进行的是值比较。
-
alert(1 == '1'); // true alert(1 === '1'); // false alert(Infinity === Infinity); // true
- 2. 比较对象,数组和函数时,进行的是引用比较,也就是说,只有两个变量引用的是同一个对象时,它们才相等,否则,即使两个对象拥有完全相同的属性和方法,它们也不会相等。
-
var a = [1], b = [1]; alert(a == b); // false alert(null == null); // true alert(null === null); // true alert(undefined == undefined); // true alert(undefined === undefined); // true alert(null == undefined); // true, 这个比较特殊 alert(null === undefined); // false, 两者类型不同
- 3. 值NaN不会与其他任何值相等。
-
alert(NaN == NaN); // false alert(NaN === NaN); // false
- 4. 对于==比较,如果一个值是数字,另一个值是字符串,则字符串会转换为数字,再用转换后的值进行比较。
-
alert(2 == '2'); // true
- 5. 对于==比较,如果一个值为布尔值,则它会被转换成数字(true转换成1,false转换成0),然后再进行比较。
-
alert(1 == true); // true alert('1' == true); // true, '1'被转换成数字1,true也被转换成数字1 - 6. 对于==比较,如果一个值是对象,另一个值是数字或字符串,则会将对象转换成原始类型的值,再进行比较。
-
alert([10] == 10); // true alert([10] == '10'); // true
二. != 和 !==
它们对运算数的影响和”==和===”相同。
三. <,>,<=,>=
比较运算符的运算数可以是任意类型的,但比较运算只能在数字和字符串上执行,所以不是数字或字符串的运算数将被转换成数字或字符串,比较和转换规则如下:
- 1. 如果两个运算数都是数字,或者都被转换成了数字,那么将采取数字比较。
-
alert(true > 0); // true
- 2. 如果两个运算数都是字符串,或者都被转换成了字符串,那么将作为字符串进行比较。
-
alert('aaa' >= 'aaa'); // true alert('aaa' >= 'aab'); // false - 3. 如果一个运算数是字符串,或者被转换成了字符串,而另一个运算数是数字,或者被转换成了数字,那么运算符会将字符串转换为数字,然后执行
数字比较。如果字符串无法被转换为数字(被转换为NaN),那么比较结果为false。 -
alert('10' > 5); // true alert(['10'] > 5); // true alert('ab' > 5); // false - 4. 如果对象可以被转换成数字或字符串,JS将执行数字转换。
-
alert(new Date() > 5); // true alert(['10'] > 5); // true
- 5. 如果运算数都不能被转换为数字或字符串,则比较运算的结果为false。
-
alert(/\d/ > 0); // false
- 6. 如果某个运算数是NaN,或被转换成了NaN,则比较运算的结果为false。
-
alert({} > 0); // false alert(NaN > 0); // false
