zoukankan      html  css  js  c++  java
  • JS中==与===区别

    ==和===定义

    =====虽然都是关系表达式运算符,但它们的定义是有所不同的:

    • ==:称作相等运算符(Equality Operator),它用来检测两个操作是否相等,这里的相等的定义非常宽松,可以允许类型的转换
    • ===:称作严格相等运算符(Strict Equality),也被称之为恒等运算符(Identity Operator)或全等运算符,它用来检测两个操作数是否严格相等

    == 和 ===运算规则

    JavaScript中=====运算符,它们的运算都具有自己的运算规则。

    ==运算规则

    ==运算符对于两个数比较并不严格。如果两个操作数不是同一类型,那么相等运算符会尝试进行一些类型转换,然后进行比较。

    在转换不同的数据类型时,其会遵循下列基本原则:

    如果两个操作数的类型相同,则会按照严格相等的比较规则一样,如果严格相等,那么比较结果为相等。如果它们不严格相等,则比较结果为不相等。

    如果两个操作数的类型不同,==相等操作符也可能会认为它们相等。检测相等将会遵守下面的规则和类型转换:

    如果一个值是null, 另一个是undefined,则它们是相等:

    null == undefined; // => true
    

    如果一个值是数字,另一个是字符串,先将字符串转换为数值,然后使用转换后的值进行比较:

    1 == '1'; // => true

    如果其中一个值是true,则将其转换为1再进行比较。如果其中一个值是false,则将其转换为0再进行比较:

    true == 0;   // => false
    false == 1;  // => false
    true == 1;   // => true
    false == 0;  // => true
    true == '1'; // => true
    false == '0';// => true
    

    如果一个值是对象,另一个值是数字或字符串,将会先使用toString()valueOf()将对象转换为原始值,然后再进行比较。

    两个操作数在进行比较时则要遵循下列规则:

    • nullundefined是相等的
    • 要比较相等性之前,不能将nullundefined转换成其他任何值
    • 如果有一个操作是NaN,则相等操作符返回false,而不相等操作符返回true重要提示: 即使两个操作数都是NaN,相等操作符也返回false,因为按照规则 ,NaN不等于NaN
    • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false

    来看一下对象的比较:

    var a = [1,2,3];

    var b = [1,2,3];

    var c = { x: 1, y: 2 };

    var d = { x: 1, y: 2 };

    var e = "text";

    var f = "te" + "xt";

    a == b // =>false c == d // =>false e == f // =>true

    ===运算规则

    严格相等运算符===首先要计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换。其运算规则遵循下面的规则:

    如果两个值类型不相同,则它们不相等

    true === '1'; // => false
    

    其中操作数true是布尔值,而'1'是字符串值。

    如果两个者都是null或者都是undefined,则它们相等:

    null === null; // => true
    undefined === undefined; // => true
    null === undefined; // =>false
    

    如果两个值都是布尔值truefalse,则它们相等:

    true === true;   // =>true
    false === false; // =>true
    true === 1;      // =>false
    true === '1';    // =>false
    false === 0;     // =>false
    false === '0';   // =>false
    

    如果其中一个值是NaN,或者两个值都是NaN,则它们不相等。NaN和其他任何值都是不相等的,包括它本身。通过x !== x来判断x是否为NaN,只有在xNaN的时候,这个表达式的值才为true

    如果两个值为数字且数值相等,则它们相等。如果一个值为0,另一个值为-0,则它们同样的相等。

    转载自http://www.w3cplus.com/javascript/which-equals-operator-vs-should-be-used-in-javascript-comparisons.html

  • 相关阅读:
    Redis常用命令详细介绍(摘抄)
    线性表和链表
    TCP传输连接中的SYN、ACK、SEQ、AN分别是什么意思?他们所带的数字又是代表什么?
    redis默认有16个数据库
    常见问题
    jquery-table2excel 不导出列(隐藏列,或指定列)
    AngularJS 防止页面闪烁的方法
    如何做好需求分析
    IIS 一个服务器下不同站点操作共享文件夹
    批量修改 mysql数据库编码格式(Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='格式错误)
  • 原文地址:https://www.cnblogs.com/yuxingyoucan/p/6048428.html
Copyright © 2011-2022 走看看