zoukankan      html  css  js  c++  java
  • JavaScript 之 特殊运算符

    一、=== 下面的规则用来判断两个值是否===相等:
          首先,== equality 等同,=== identity 恒等。
          ==, 两边值类型不同的时候,要先进行类型转换,再比较。
          ===,不做类型转换,类型不同的一定不等。
    1、如果类型不同,就[不相等]
    2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断)
    3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。
    4、如果两个值都是true,或者都是false,那么[相等]。
    5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。
    6、如果两个值都是null,或者都是undefined,那么[相等]。

    二、==

    根据以下规则:
    1、如果两个值类型相同,进行 === 比较。
    2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:
    a、如果一个是null、一个是undefined,那么[相等]。
    b、如果一个是字符串,一个是数值,把 " 字符串转换成数值 "再进行比较。
    c、如果任一值是 true,把它转换成" 1 "再比较;如果任一值是 false,把它转换成" 0 "再比较。
    d、如果一个是对象,另一个是数值或字符串,把对象转换成" 基础类型的值再比较 "。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,在此不做说明。
    e、任何其他组合,都[不相等]。
     
    举例:
    "1" == true 类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。

    = 赋值运算符
    == 等于
    === 严格等于
    例: var a = 3; var b = "3";

    a==b 返回 true
    a===b 返回 false 

    因为a,b的类型不一样 ,===用来进行严格的比较判断

          简而言之就是“==”只要求值相等。“===”要求值和类型都相等。

    三、&& 运算符

          从对其它语言的了解,表达的意思就是把多个逻辑条件连接起来确定真假,如果连接的条件有一个为假,则返回假。 其实JS里的&&运算符也是这个意思。在JS里,任何类型的值都可以转换成逻辑布尔值 如:

    对象               →   true
    非空字符串      →   true
    非0数字          →   true
    true               →   true
      
    ""                   →  false
    null                →  false
    undefined       →  false
    false              →  false
    NaN               →  false
    0                   →  false


    例如:
     var a1 =   "aa";
     var a2 =   "bb";
     var a3 =   "cc";
     var aa = a1 && a2 && a3;   //3个条件连接起来判断真假,都为真 则返回最后一个值。
     alert(aa);  //返回a3


    下面解析
    (1)如果3个条件都为真, 则返回第三个值。
    (2)如果3个条件都为假, 则返回第一个值, 由于短路算法, 从左到右发现第一个值为假,第二个值和第三个值都会被忽略。
    (3)如果只是其中一个为假, 则返回假的那个值, 根据短路算法,后面的值被忽略.

    上面的逻辑其实表达的意思如下:
      if(!a1)        a1没有意义 返回a1
          alert(a1);
      
    else if(!a2)   a2也没有意义 返回a2
          alert(a2);
      else if(!a3)  a3也没有意义 返回a3
          alert(a3);
      else
           alert(a3); //都有意义 返回 最后一个a3

     四、|| 运算符

          理解了前面的&&运算符,它表达的意思是,如果要使表达式有意义,从左到右只要发现有一个有意义则整个表达式都有意义,并返回这个有意义的值,如果都是没意义的值,则返回最后那个值。

    var a1 =   null;
    var a2 =   NaN;
    var a3 =  undefined;
    var aa = a1 || a2 || a3;
    alert(aa); //返回" undefined "


    下面解析
    (1)如果其中3个条件都是真,则返回第一个为真的值, 根据短路算法, 第二个值和第三个值都会被忽略,因为第一个值已经决定了结果。

    (2)如果只有其中一个为真, 则返回为真的那个值. 后面的条件都将忽略。

    (3)如果都为假,返回最后一个假的值。
    var aa = a1 && a2 && a3;
    如果用if来表示如下:
    if(a1)
       alert(a1);
    else
    {
      if(a2)
      {
        alert(a2);
      }
     else
        alert(a3);
    }

    JS中经常用|| 运算符来做逻辑判断。 如:

    var a = false;
    var b = [1,2,3];
    var aa = a || b   //如果第一个值没有意义就返回第二个, 否则返回第一个

    表达的意思如下:

    if(a == null)
     alert(b);
    else
     alert(a);

    其等价于c#里的:
    string a == null ? b : a

    再区别一下如下的代码:
    var a = undefined;
    var b =[1,2,3];

    var c = (a==undefined) &&  b   //如果a没有初始化,则用b来代替
    var d = a || b                               // 如果a等于false,则用b来代替
    alert(c); //返回1,2,3
    alert(d); //返回1,2,3

          最后总结一下, && 和|| 运算符的区别:

    (1)两者都是计算连接条件的真假, 最后来确定值, 都是从false开始测试的。
    (2)对于 &&  如果第一个值是false 则整个表达式都是false 并返回第一个值,后面的条件都将忽略。
    (3)对于 ||  如果第一个值是false 则它会继续看后面的条件是否为真,直到找到真值就立即返回,如果到最后也没找到真值,则返回最后一个值。
     

  • 相关阅读:
    week9-东东学打牌
    week9-咕咕东的目录管理器
    CSP-M2-C-咕咕东的奇妙序列
    CSP-M2-B
    P1084 疫情控制
    P2447 [SDOI2010]外星千足虫
    P4035 [JSOI2008]球形空间产生器
    P3389 【模板】高斯消元法
    P4051 [JSOI2007]字符加密
    P6114 【模板】Lyndon 分解
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4220683.html
Copyright © 2011-2022 走看看