ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、概述 比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。 ~~~ 2 > 1 // true ~~~ JavaScript 一共提供了8个比较运算符。 * `>`大于运算符 * `<`小于运算符 * `<=`小于或等于运算符 * `>=`大于或等于运算符 * `==`相等运算符 * `===`严格相等运算符 * `!=`不相等运算符 * `!==`严格不相等运算符 这八个比较运算符分成两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等的比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较 Unicode 码点);否则,将两个运算子都转成数值,再比较数值的大小。 ## 二、非相等运算符:字符串的比较 字符串按照字典顺序进行比较。 ~~~ 'cat' > 'dog' // false 'cat' > 'catalog' // false ~~~ JavaScript 引擎内部首先比较首字符的 Unicode 码点。如果相等,再比较第二个字符的 Unicode 码点,以此类推。 由于所有字符都有 Unicode 码点,因此汉字也可以比较。 ~~~ '大' > '小' // false ~~~ 上面代码中,“大”的 Unicode 码点是22823,“小”是23567,因此返回`false`。 ## 三、非相等运算符:非字符串的比较 如果两个运算子之中,至少有一个不是字符串,需要分成以下两种情况。 * 如果两个运算子都是原始类型的值,则是先转成数值再比较。 ~~~ 5 > '4' // true // 等同于 5 > Number('4') // 即 5 > 4 true > false // true // 等同于 Number(true) > Number(false) // 即 1 > 0 2 > true // true // 等同于 2 > Number(true) // 即 2 > 1 ~~~ 这里需要注意与`NaN`的比较。任何值(包括`NaN`本身)与`NaN`比较,返回的都是`false`。 ~~~ 1 > NaN // false 1 <= NaN // false '1' > NaN // false '1' <= NaN // false NaN > NaN // false NaN <= NaN // false ~~~ * 如果运算子是对象,会转为原始类型的值,再进行比较。 ~~~ var x = [2]; x > '11' // true // 等同于 [2].valueOf().toString() > '11' // 即 '2' > '11' x.valueOf = function () { return '1' }; x > '11' // false // 等同于 [2].valueOf() > '11' // 即 '1' > '11' ~~~ ~~~ [2] > [1] // true // 等同于 [2].valueOf().toString() > [1].valueOf().toString() // 即 '2' > '1' [2] > [11] // true // 等同于 [2].valueOf().toString() > [11].valueOf().toString() // 即 '2' > '11' { x: 2 } >= { x: 1 } // true // 等同于 { x: 2 }.valueOf().toString() >= { x: 1 }.valueOf().toString() // 即 '[object Object]' >= '[object Object]' ~~~ ## 四、严格相等运算符 ## 五、严格不相等运算符 ## 六、相等运算符 ## 七、不相等运算符