当前位置 : 主页 > 网络编程 > 其它编程 >

JavaScript的运算符【二】(比较运算符)

来源:互联网 收集:自由互联 发布时间:2023-07-02
运算符是处理数据的基本方法用来从现有的值得到新的值。JavaScript提供了多种运算符覆盖了所有主要的运算。一.概述比较运算符总览8个用来从现有的值得到新的值。Javascript 提供了多种
运算符是处理数据的基本方法用来从现有的值得到新的值。JavaScript提供了多种运算符覆盖了所有主要的运算。一.概述比较运算符总览8个用来从现有的值得到新的值。Javascript 提供了多种运算符覆盖了所有主要的运算。

一.概述

  • 比较运算符总览8个 ①>大于运算符 ②<小于运算符 ③<小于或等于运算符 ④>大于或等于运算符 ⑤相等运算符 ⑥严格相等运算符 ⑦!不相等运算符 ⑧!严格不相等运算符
  • 比较运算符可以比较各种类型的值不仅仅是数值
  • 非相等性运算符有哪些前4相等性运算符有哪些后4 见上面总结
  • 非相等性运算符的比较特点 ①分为2种一种字符串比较一种非字符串比较 ②字符串比较一个字符一个字符的码点进行比较 ③非字符串比较中原始类型转为数字比较非原始类型对象类型调用valueOf(),toString()进行类型转换后比较 ④具体见非相等运算符
  • 相等性运算符的比较特点 ①分为2种一种严格相等符一种非严格相等符 ②严格相等符,!判断类型是否一致基础类型判断值复合类型对象数组函数判断引用地址 ③非严格相等符,!相同类型判断方式与严格相等符相同不同类型的原始值比较转为数值类型对象与原始类型值比较尝试转换成原始类型 ④具体见相等运算符
  • 二.非相等运算符

    1.字符串之间比较

    • 字符串按每个字符的字典顺序比较引擎内部比较的是Unicode 码点

      cat > dog // falsecat > catalog // false大 > 小 // false

    2.非字符串的比较

    Ⅰ.原始类型

    • 所有非数字原始类型都会转成数字然后比较

    • 若无法转换成数字则会转换成NaN任何数据和NaN(包括NaN本身)比较都会返回false

      //一 基础类型比较5 > 4 // true// 等同于 5 > Number(4)// 即 5 > 4true > false // true// 等同于 Number(true) > Number(false)// 即 1 > 02 > true // true// 等同于 2 > Number(true)// 即 2 > 12>t//false//t会转换为NaN比较会返回false//二 NaN比较1 > NaN // false1 < NaN // false1 > NaN // false1 < NaN // falseNaN > NaN // falseNaN < NaN // false

    Ⅱ.对象类型

    • 对象转换为原始类型再比较使用 valueOf再调用返回数据的toString方法的值进行比较

      var x [2];x > 11 // true// 等同于 [2].valueOf().toString() > 11// 即 2 > 11x.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]

    三.相等性运算符

    • ! 会进行类型转换再在类型内比较 !直接比较如果类型不一致直接返回false

    1.严格相等运算符和严格不相等运算符

    • !特性

    (1).不同类型的值

    • 不同类型的值直接返回false

      1 "1" // falsetrue "true" // false

    (2).同一类的原始类型值

    • 数值、字符串、布尔值的值相同返回true如下值比较特殊

      //10进制1与16进制1相同1 0x1 // trueNaN NaN // false0 -0 // true

    (3).复合类型的值

    • 两个复合类型对象、数组、函数的数据比较时不是比较它们的值是否相等而是比较它们是否指向同一个地址

    • 对于复合函数来说!比较的是地址引用而>><<比较的是值

      //比较地址{} {} // false[] [] // false(function () {} function () {}) // falsevar v1 {};var v2 v1;v1 v2 // truevar obj1 {};var obj2 {};obj1 > obj2 // true [object Object] > [object Object]obj1 < obj2 // trueobj1 obj2 // false

    (4).undefined 和 null

    • undefined和null与自身严格相等

    • 由于变量声明后默认值是undefined因此两个只声明未赋值的变量是相等的

      undefined undefined // truenull null // truevar v1;var v2;v1 v2 // true

    (5).严格不相等运算符

    • 严格相等运算符有一个对应的“严格不相等运算符”!它的算法就是先求严格相等运算符的结果然后返回相反值

    2.相等运算符和不相等运算符

    • !特性

    (1).相同类型

    • 在比较相同类型的数据时与严格相等运算符完全一样

    (2).不同类型原始类型值(Number,Boolean,String)

    • 原始类型值会转换为数值比较

      1 true // true// 等同于 1 Number(true)0 false // true// 等同于 0 Number(false)2 true // false// 等同于 2 Number(true)2 false // false// 等同于 2 Number(false)true true // false// 等同于 Number(true) Number(true)// 等同于 NaN 1 0 // true// 等同于 Number() 0// 等同于 0 0 false // true// 等同于 Number() Number(false)// 等同于 0 01 true // true// 等同于 Number(1) Number(true)// 等同于 1 1\n 123 \t 123 // true// 因为字符串转为数字时省略前置和后置的空格

    (3).对象与原始类型值比较

    • 对象这里指广义的对象包括数组和函数与原始类型的值比较时对象转换成原始类型的值再进行比较

      // 对象与数值比较时对象转为数值[1] 1 // true// 等同于 Number([1]) 1// 对象与字符串比较时对象转为字符串[1] 1 // true// 等同于 String([1]) 1[1, 2] 1,2 // true// 等同于 String([1, 2]) 1,2// 对象与布尔值比较时两边都转为数值[1] true // true// 等同于 Number([1]) Number(true)[2] true // false// 等同于 Number([2]) Number(true)

    (4).undefined 和 null

    • undefined和null与其他类型的值比较时结果都为false它们互相比较时结果为true

      false null // falsefalse undefined // false0 null // false0 undefined // falseundefined null // true

    (5).相等运算符的缺点

    • 相等运算符隐藏的类型转换会带来一些违反直觉的结果

      0 // true0 0 // true2 true // false2 false // falsefalse false // falsefalse 0 // truefalse undefined // falsefalse null // falsenull undefined // true \t\r\n 0 // true

    网友评论