zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》阅读笔记(六):ECMAScript中的运算符(二)

    2.9.5、加性运算符

      加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。

      1、加法运算符:

    1 var iResult=1+2;
    2 console.log(iResult);//outputs 3

      特殊性:

    • 某个运算数是NaN,结果为NaN
    • Infinity加Infinity,结果为Infinity
    • -Infinity加-Infinity,结果为-Infinity
    • Infinity加-Infinity,结果为NaN
    • 如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上
    • 如果只有一个运算数是字符串,把另一个运算数转换为字符串,结果是两个字符串连接成的字符串

      示例:

     1 var iResult2=NaN+1;
    2 console.log(iResult2);//NaN
    3
    4 var iResult3=Infinity+Infinity;
    5 console.log(iResult3);//Infinity
    6
    7 var iResult4=-Infinity-Infinity;
    8 console.log(iResult4);//-Infinity
    9
    10 var iResult5="abc"+"bcd";
    11 console.log(iResult5);//abcbcd
    12
    13 var iResult6=5+"5";
    14 console.log(iResult6);//55

      2、减法运算符:

    1 var iResult=2-1;
    2 console.log(iResult);//1

      特殊性:

    • 某个运算数是NaN,结果为NaN
    • Infinity减Infinity,结果为NaN
    • -Infinity减-Infinity,结果为NaN
    • Infinity减-Infinity,结果为Infinity
    • -Infinity减-Infinity,结果为-Infinity
    • 如果两个运算数都是字符串,结果为NaN
    • 如果只有一个运算数是字符串,把字符串转换为数字再进行运算

      示例:

     1 var iResult2=NaN-1;
    2 console.log(iResult2);//NaN
    3
    4 var iResult3=Infinity-Infinity;
    5 console.log(iResult3);//NaN
    6
    7 var iResult4=-Infinity-(-Infinity);
    8 console.log(iResult4);//NaN
    9
    10 var iResult5=-Infinity-Infinity;
    11 console.log(iResult5);//-Infinity
    12
    13 var iResult6=Infinity-(-Infinity);
    14 console.log(iResult6);//Infinity
    15
    16 var iResult7="abc"-"a";
    17 console.log(iResult7);//NaN
    18
    19 var iResult8="5"-5;
    20 console.log(iResult8);//0
    21
    22 var iResult9="a"-5;
    23 console.log(iResult9);//NaN

    2.9.6、关系运算符

      关系运算符<、>、<=、>=执行的是两个数字的比较运算,返回的是一个Boolean值。如果两个操作数都是字符串,则逐一比较两个字符串的ASC码,如果只有一方是字符串,则把字符串转换为数字后比较,示例如下:

     1 var bResult=2<1;
    2 console.log(bResult);//false
    3
    4 var bResult="B"<"a";
    5 console.log(bResult);//true
    6
    7 var bResult="b"<"a";
    8 console.log(bResult);//false
    9
    10 var bResult="13"<"2";
    11 console.log(bResult);//true
    12
    13 var bResult=13<"2";
    14 console.log(bResult);//false
    15
    16 var bResult=-1<"a";
    17 console.log(bResult);//false

      第17行的代码中,"a"被转换为数字时返回的是NaN,任何包含NaN的关系运算都要返回false。

    2.9.7、等性运算符

      1、等号和非等号

      在ECMAScript中,等号(==)及非等号(!=)都返回Boolean值。为确定两个运算数是否相等,这两个运算数都会进行类型转换,转换规则如下:

    • 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
    • 如果一个运算数是字符串,另一个运算数是数字,在检查相等性之前,要尝试把字符串转换成数字。
    • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
    • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

      在进行比较时,运算符还遵循还列规则:

    • 值null和undefined相等
    • 在检查相等性时,不能把null和undefined转换成其他值。
    • 如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使两个运算数都是NaN,等号仍返回false,因为根据规则,NaN不等于NaN。
    • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数把向同一个对象,那么等号返回true,否则两个运算数不等。

      示例:

     1 console.log(null==undefined);//true
    2 console.log("NaN"==NaN);//false
    3 console.log(5==NaN);//false
    4 console.log(NaN==NaN);//false
    5 console.log(NaN!=NaN);//true
    6 console.log(false==0);//true
    7 console.log(true==1);//true
    8 console.log(true==2);//false
    9 console.log(undefined==0);//false
    10 console.log(null==0);//false
    11 console.log("5"==5);//true

      2、全等号和非全等号

      等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。全等号由三个等号(===)表示,非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数就相等的情况下,才返回true。例如:

    1 console.log("55"==55);//true
    2 console.log("55"===55);//false
    3 console.log("55"!=55);//false
    4 console.log("55"!==55);//true

    2.9.8、条件运算符

      条件运算符跟其他语言中的相同:varialbe=boolean_expression?true_value:false_value;

      示例:

    1 function Max(iNum1,iNum2){
    2 return iNum1>=iNum2?iNum1:iNum2;
    3 }
    4 console.log(Max(1,3));//3
    5 console.log(Max(3,1));//3

    2.9.9、赋值运算符

      简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量,例如:

    1 var iNum=10;

      复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:

    1 var iNum=10;
    2 iNum=iNum+10;
    3
    4 //等同于
    5 var iNum=10;
    6 iNum+=10;

      每种主要的算术运算及其他几个运算都有复合赋值运算符:

    • 乘法/赋值(*=)
    • 除法/赋值(/=)
    • 取模/赋值(%=)
    • 加法/赋值(+=)
    • 减法/赋值(-=)
    • 左移/赋值(<<=)
    • 有符号右移/赋值(>>=)
    • 无符号右移/赋值(>>>=)

    2.9.10、逗号运算符

      用逗号运算符可以在一条语句中执行多个运算。例如:

    1 var iNum=1,iNum2=2,iNum3=3;

      逗号运算符最常用于变量声明中。

    版权

    作者:Artwl

    出处:http://artwl.cnblogs.com

    本文首发博客园,版权归作者跟博客园共有。转载必须保留本段声明,并在页面显著位置给出本文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    沈阳集训day2
    ac自动机
    2018沈阳集训day1
    洛谷P1875 佳佳的魔法药水
    洛谷P1941 飞扬的小鸟
    Noip2016day2
    1123: [POI2008]BLO
    1718: [Usaco2006 Jan] Redundant Paths 分离的路径
    P3119 [USACO15JAN]草鉴定Grass Cownoisseur
    [LeetCode] Clone Graph
  • 原文地址:https://www.cnblogs.com/artwl/p/2310079.html
Copyright © 2011-2022 走看看