JavaScript 语言中有两种比较方式,转换类型比较运算符 ==
和严格比较运算符 ===
。其中严格比较运算符仅当两个操做数的类型相同且值相等时才为true。而转换类型比较运算符==
会在进行比较以前,将两个操做数转换成相同的类型,再来比较。code
比较运算符经常使用语逻辑语句中,它主要是用语断定变量或者值是否相等。对象
相等运算符 ==
会为两个不一样类型的操做数转换类型,而后进行严格比较。ip
console.log(1 == 1); // true console.log(1 == 2); // false console.log(1 == true); // true console.log(1 == '1'); // true
从上述代码中的1 == '1'
,输出结果为 true
,就能够看出 ==
相等运算符,在对两个操做数进行比较以前,会将两个操做数转换成相同的类型。内存
当使用比较运算符时,若是其中有布尔类型的操做数,值为 true时会转换为1,值为false时会转换为0。字符串
当两个操做数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象时才相等,即他们在栈内存中的引用地址相同。console
严格相等运算符 ===
不会对操做数进行类型转换,只有当值相等而且类型也是相等时才会返回 true
。class
console.log(1 === 1); // true console.log(1 === 2); // false console.log(1 === true); // false console.log(1 === false); // false console.log(1 === '1'); // false
从a === c
d的比较结果能够看出,不一样类型的值进行比较时,会返回 false。变量
不等运算符 !=
只有当操做数不相等时才返回true
,若是两操做数不是同一类型,会将操做数转为赞成类型再进行比较。引用
var a = 1; var b = 2; var c = '1'; console.log(a != 1); // false console.log(a != b); // true console.log(a != c); // false
若是两操做数为对象类型,JavaScript会比较其内部引用地址,仅当他们在内存中引用不一样对象时不相等。方法
严格不等运算符 !==
当操做数不相等或不一样类型时返回 true。
var a = 1; var b = 2; var c = '1'; console.log(a !== 1); // false console.log(a !== b); // true console.log(a !== c); // true
大于运算符 >
,只有当左操做数大于右操做数时才返回 true
。
console.log(5 > 1); // true console.log(5 > 10); // false console.log(5 > '5'); // false
大于等于运算符 >=
,只有当左操做数大于或者等于右操做数时才返回 true
。
console.log(5 >= 1); // true console.log(5 >= 5); // true console.log(5 >= 10); // false console.log(5 >= '5'); // true
小于运算符 <
,只有当左操做数小于右操做数时才返回 true
。
console.log(5 < 1); // false console.log(5 < 5); // false console.log(5 < 10); // true console.log(5 < '5'); // false
小于运算符 <
,只有当左操做数小于或者等于右操做数时才返回 true
。
console.log(5 <= 1); // false console.log(5 <= 5); // true console.log(5 <= 10); // true console.log(5 <= '5'); // true
当比较运算涉及类型转换时,JavaScript 会按如下规则对字符串、数字、布尔、对象等类型的操做数进行操做:
valueOf
和 toString
方法将对象转换为其原始值。若是尝试转换失败,会产生一个运行时错误。console.log(1 <= 3); console.log(true != 5); console.log('1' >= false); console.log(2 === '5'); console.log(5 == '5');