JavaScript一共提供了8个比较运算符:
  • > 大于运算符
  • < 小于运算符
  • <= 小于等于运算符
  • >= 大于等于运算符
  • == 相等运算符
  • === 严格相等运算符
  • != 不相等运算符
  • !== 严格不相等运算符

非相等的比较

对于非相等的比较,算法是先看两个运算子是否全是字符串,如果都是字符串的话,就按照Unicode码的大小一个字符一个字符来比较;否则的话,将两个运算子都转成数值,再比较大小

  1. 字符串的比较是按照字典(Unicode)顺序进行比较的.
  2. 非字符串的比较
    • 原始值类型
      先转换成数值然后再比较
      注意点: 任何值与NaN(包括NaN)比较,都返回false
    • 对象
      如果运算子是对象,会转为原始类型的值再进行比较
      对象转换为原始类型的值,算法是先调用对象的valueOf方法;如果返回的还是对象,再接着调用toString方法。
      var x = [2];
      // 输出true
      // x的valueOf()返回[2],是对象类型,所以再调用toString(),结果是"2">"11",因为两个都是字符串,所以先比较第一个字符,"2">"1",返回true
      x > '11' x.valueOf = function(){ return '2'; }
      // 返回false,因为x是对象,对象的比较先调用对象的valueOf()将对象转为原始值类型,x的valueOf()方法返回的是基本类型,不再调用toString(),结果为'2'>'21',返回false
      x > '21'

相等运算符和严格相等运算符

相等运算符(==)比较的是两个值是否相等,严格相等运算符(===)比较是否为'同一个值'; '==='先比较类型,如果类型不一样,则直接返回false, '=='会先将他们转换为同一个类型,再用严格相等运算符进行比较
两个复合类型(对象,数组,函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址
注意: 对于两个对象的比较,严格运算符比较的是地址,而大于或小于运算符比较的是值

严格不相等运算符

严格不相等运算符的算法是先求严格运算符的结果,然后再返回相反值

相等运算符

相等运算符比较同类型的数据时,与严格相等运算符完全一样;比较不同类型的数据时,相等运算符会先将数据类型转换,然后再用严格相等运算符比较

  1. 原始数据类型会先转换成数值再进行比较(字符串转换为数字时,会省略前置和后置空格)

    // 等同于1 === Number(true)
    1 == true // true // false 等同于 Number('true') === Number(true) ==> NaN === 1
    'true' == true
  2. 对象与原始类型值比较
    1. 对象与数值类型比较,对象转为数值
    2. 对象与字符串类型比较,对象转为字符串
    3. 对象与布尔值比较时,两边都是数值
    // 对象与数值类型比较,对象转为数值
    // true 等同于 Number([2]) == 2
    [2] == 2 // 对象与字符串比较,对象转为字符串
    // true 等同于 String([3,4]) == '3,4'
    [3,4] == '3,4' // 对象与布尔值比较,两边都转为数值
    // false 等同于 Number([5]) == Number(true)
    [5] == true
  3. null和undefined与其他类型的值比较时,结果都为false,他们相互比较时为true: null == undefined // true
  4. 相等运算符隐藏的类型转换,会带来违反直觉的结果,因此不建议使用想的运算符(==),最好只使用严格相等运算符(===): 0 == '' 返回true

不相等运算符

它的算法就是先求相等运算符的结果,然后再返回相反值

javascript的比较运算符的更多相关文章

  1. (转)JavaScript中的运算符优先级

    JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...

  2. JavaScript基础——使用运算符

    JavaScript运算符允许你改变一个变量的值.你已经熟悉了用于赋值给变量的=运算符.JavaScript提供了几种不同的运算符,它们可以划分为两大类:算数运算符和赋值运算符. 1.算数运算符 你可 ...

  3. JavaScript中“typeof”运算符与“instanceof”运算符的差异

    在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...

  4. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  5. JavaScript 基本语法 -- 运算符的优先级

    在所有的运算里,都是有运算顺序的.小时候学四则运算的时候,我们都知道这么一个规则:先乘除后加减,有括号要先算括号! 同样的,在JavaScript里面,运算符也是有相应的优先级的.其优先级如下表所示, ...

  6. JavaScript中逗号运算符

    JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...

  7. JavaScript学习系列7 -- JavaScript中的运算符

    今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或 ...

  8. 【废弃中】JavaScript 式与运算符

    创建: 2017/09/25 更新: 2019/01/14 修改标题 [JavaScript 式与运算符] ->  [JavaScript 式与主要Object的方法] 更新: 2019/02/ ...

  9. JavaScript按位运算符~

    1. JavaScript按位运算符 Bit operators work on 32 bits numbers. 2. JavaScript按位运算符~ 值得注意的是,在JavaScript中,~5 ...

  10. JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

    1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...

随机推荐

  1. shell脚本之判断当前内核主版本是否为3,且次版本是否大于10

    [root@localhost ~]# cat uname.sh #!/bin/bash main=`uname -r | awk -F . '{print $1}'` minor=`uname -r ...

  2. Django的后台管理系统Admin(5)

    Django的后台管理系统就是为了方便管理员管理网站,所以django自带了一个后台管理系统,接下来记录一下如何使用这个后台的管理系统. 首先我们要进入后台管理系统,就要有一个管理员的账号,先来创建有 ...

  3. pytest(5)-断言

    前言 断言是完整的测试用例中不可或缺的因素,用例只有加入断言,将实际结果与预期结果进行比对,才能判断它的通过与否. unittest 框架提供了其特有的断言方式,如:assertEqual.asser ...

  4. 二,配置jdk,安装tomcat.以及tomcat项目的发布

    1.jdk配置 一.环境准备 Windows10 jdk-9.0.1 二.下载并安装JDK 选择一个适合自己的JDK版本下载并安装即可,具体流程不详述. 三.环境变量配置 1.右键桌面上"我 ...

  5. 『无为则无心』Python面向对象 — 54、重写和super()函数

    目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...

  6. Selenium自动化测试面试题合集

    1.什么是自动化测试.自动化测试的优势是什么? 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试. 自动化测试的优势: 1.减少回归测试成本 2.减少兼容性测试成本 3.提高测试反馈速度 4.提 ...

  7. javascript中逻辑运算符&&和||的返回值问题

    今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到 ...

  8. IDEA 连接MySQL并使用

    IDEA 连接MySQL方式 MySQL使用命令行的形式实在是有点难受,多行书写的时候要是写错了就比较难过了,因此还是需要一个图形化的操作界面.有很多可选择方式,由于之前就下载了IDEA,其中也继承了 ...

  9. Visual Studio 文字样式背景设置

    菜单栏 "工具"->选项->环境->常规

  10. Cache写机制

    Cache 写机制分为:Write-through和Write-back Write-through(直写模式) 定义:在数据更新时,同时写入缓存Cache和后端存储(主存): 优点:操作简单: 缺点 ...