关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或者是false.关系表达式总是返回一个布尔值。

  具有如下8个关系运算符:大于(>),小于(<),小于等于(<=),大于等于(>=),相等(==),不等(!=),恒等(===),不全等(!==)。从下面几个方面来分析:

  一、相等和不相等运算符

    “===”:恒等运算符,也称是严格相等运算符,只有在无需类型转换运算数就相等的情况下才为true.

 <script>
console.log('2' === 2);         //false 二者的类型不同
console.log(undefined === undefined); //true 二者的类型与值都相同
console.log(NaN === NaN);        //false NaN和任何值都不相等包括NaN
console.log('abc' === 'acb');      //false 字符串的相等,要长度和相应位置一样才相等
console.log([] === []);          //false 对象的相等必须是引用的相等才可以
console.log(10 === 0xa);         //true 转换成十进制进行比较
</script>

  "==":相等运算符和“===”恒等运算符相类似,但是它没有那么的严格,如果两个操作数不是同一类型,它会进行转换后再进行比较是否是相等。

     当操作数类型一样时,比较的规则和恒等运算符一样,都相等才相等;

     当操作数类型不一样时,会按如下规则来判定:

        如果一个值是对象类型,另一个是原始类型,则对象类型会通过valueOf()方法进行转换,转换成原始值,如转换的不是原始值,则通过toString()方法转换再进行比较;

        在对象转换为原始值后,如果两个操作数是字符串,则进行字符串的比较,如果里面有一个操作符不是字符串,那两个操作数通过Number()方法进行转换,转成数字进行比较.

 <script>
console.log('abc' == 'abc');    //true 类型相等,值也相等,当然相等
console.log(NaN == NaN);      //false NaN和任何者不等
console.log([] == []);       //false
console.log(10 == 0xa);       //true 转换成十进制进行比较是否相等
console.log(true == 0);       //false true转换成数字为1
console.log(true == '1');     //true
console.log([1] == 1);       //true
console.log(true == 1);      //true
console.log(null == undefined); // true null和undefined是相等的
console.log(0 == null);     // false 0和null不等
console.log('' == false);    //true 空字符串转成0和false相等
</script>

  "=": 可以看成是得到或者是赋值。作用是把等号右边的值赋予等号左边的变量或属性。

  赋值操作符的结合性是从右到左,也就是说,如果一个表达式中出现了多个赋值运算符,运算顺序是从右到左。

  “!==”:恒不等运算符,又称严格不等运算符。操作数的比较过程与恒等运算符相同,结果取反就可。

  “!=”:不相等运算符。它的操作数比较的过程和与相等运算符相同,结果取反即可。

  注意:undefined只与null相等,与其它任何值相比较都不相等。字符串相对比,比较的是字符对应的ASCII码。

<script>
console.log([] !== []);     //true
console.log( !== true);    //true
console.log('' !== );    //true
console.log(NaN !== NaN);    //true console.log('' != true);   //false
console.log(null != undefined);//false
console.log(NaN != '');     //true
console.log(undefined == null); //true
</script>

  二、比较运算符

    它用来检测两个操作数的大小关系。有大于(>),小于(<),小于等于(<=),大于等于(>=)。

    1、大于运算符

    大于运算符的操作数可能是任意类型,然而,只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换。规则如下:

    如果操作数是对象,则这个对象将先使用valueOf()转换成原始值,如果结果还不是原始值,则再使用toString()方法转换;

     在对象转换为原始值之后,如果两个操作数都是字符串,则按照字母表的顺序对两个字符串进行比较,这里提到的字母表顺序是指组成这个字符串的16位unicode字符的索引顺序;

     在对象转换为原始值之后,如果至少有一个操作数不是字符串,则两个操作数都转换成数字进行比较。

    需要注意的是Javascript字符串是一个由16位整数值组成的序列,字符串的比较也只是两个字符串中的字符的数值比较,由unicode定义的字符编码和任何特定语言或者本地语言字符集中的传统字符编码顺序不尽相同。字符串比较是区分大小写的,所以一般首先会将字符串通过String.toLowerCase()或者是String.toUpperCase()做大小写的转换。

    2、大于等于运算符

    大于等于运算符并不依赖于大于或等于运算符的比较规则,而是遵循小于运算符的比较规则,结果取反

    3、小于等于运算符

    小于等于运算符(<=)并不依赖于小于或等于运算符的比较规则,而是遵循大于运算符的比较规则,结果取反。

    4、小于运算符

    小于运算符(<)用于比较两个操作数,如果第一个操作数小于第二个操作数,则小于运算符的计算结果为true,否则为false。

  三、in运算符

    in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象有一个名为左操作数值的属性名,那么表达式返回true.

    <script>
var point = {
x: 1,
y: 2
}               //定义一个对象
console.log("x" in point); //true 对象里有一个名为”x"的属性
console.log("d" in point); //false对象里没有一个名为”d"的属性
</script>

  四、instanceof运算符

    instanceof运算符希望左操作是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则返回true,否则为false.

    <script>
var d = new Date(); //通过Date()构造函数来创建一个新的对象
console.log(d instanceof Date); //true d是由Date()创建的
console.log(d instanceof Object);//true 所有的对象都是Object的实例
console.log(d instanceof Number);//false d不是一个Number对象
</script>

    

js之运算符(关系运算符)的更多相关文章

  1. java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符

        计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...

  2. JS基础_关系运算符

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. javascript运算符——关系运算符

    × 目录 [1]恒等 [2]相等 [3]大于[4]小于 前面的话 关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值,通常在if.while或 ...

  4. C语言基础学习运算符-关系运算符

    比较大小 首先,我们得先了解一下布尔类型.C语言的C99标准支持布尔类型,关键字为_Bool,用于表示逻辑值true与false.C语言用值1表示true, 用值0表示false.因此布尔类型实际上是 ...

  5. 算数运算符& 关系运算符

    java中的算数运算符 + - * / % ++ -- + +: 加法运算符 - : 减法运算符 *: 乘法运算符 / : 除法运算符 注意: 除数不能为0,除数为0会报出异常 整数运算默认得到整数, ...

  6. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  7. 十一、 BOOL类型、分支结构和关系运算符

    BOOL类型:表示非真即假.只有两个值:YES和NO,而二进制只识别二进制数,所以,将YES替换为“1”,NO替换为“0” BOOL数据类型占一字节的空间内存 BOOL数据类型输出为:%lu:输入为: ...

  8. shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符

    shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有 ...

  9. shell之算数运算符、逻辑运算符、关系运算符、布尔运算符、文件测试运算符

    注意事项: (1)bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用: (2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Es ...

  10. MATLAB关系运算符和逻辑运算符

    1 关系运算符 关系运算符用来比较两个数之间的大小关系,在Matlab中的关系运算符包括: <  小于 <= 小于或等于 >        大于 >=      大于或等于 = ...

随机推荐

  1. springboot内置分页技术

    1,在pom.xml中注入分页的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...

  2. P4095 [HEOI2013]Eden 的新背包问题

    P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 ...

  3. centos 下启动 rabbitmq 报错的解决

    安装 rabbitmq 后进行了一些配置,然后启动服务: service rabbitmq-server start 无法启动.通过 journalctl -xe 查看日志后,有如下日志: ... - ...

  4. LC 670. Maximum Swap

    Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...

  5. Python Flask,cookie,session ,设置、获取、删除

    使用Response类的set_cookie()方法可以设置cookie: Response.set_cookie( key, //键 value='', //值 max_age=None, //秒为 ...

  6. C# VS预生成事件命令行 和 生成后事件命令行

    宏 说明 $(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) 输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值. ...

  7. ThreadLocal详解【使用场景】

    转: 么是ThreadLocal 根据JDK文档中的解释:ThreadLocal的作用是提供线程内的局部变量,这种变量在多线程环境下访问时能够保证各个线程里变量的独立性. 从这里可以看出,引入Thre ...

  8. C2B电商三种主要模式的分析_数据分析师

    C2B电商三种主要模式的分析_数据分析师 在过去的一年中电商领域血雨腥风,尤其是天猫.京东.苏宁.当当.易讯等B2C电商打得不亦乐乎.而随着B2C领域竞争进入白热化阶段,C2B模式也在天猫" ...

  9. python之selenium元素定位方法

    前提: 大家好,今天我们来学习一下selenium,今天主要讲解selenium定位元素的方法,希望对大家有所帮助! 内容: 一,selenium定位元素 selenium提供了8种方法: 1.id ...

  10. Java垃圾收集器与内存分配策略

    程序的计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈侦随着方法的进入和退出而有条不紊地执行出栈和如栈操作. 判断对象是不是已经死亡的方法: 一.引用计数算法: 给对象添加一个引用 ...