JavaScript高级程序设计第三章之操作符

来源:互联网 发布:linux 中telnet命令 编辑:程序博客网 时间:2024/06/16 02:13

ECMA中有五种简单的数据类型(基本数据类型):
Undefined、Null、Boolean、Number和String。
各种与基本数据类型有关的操作符:


一元操作符(i++,++i,i–,–i)

  • 在应用于一个包含有数字字符的字符串时,现将其转换为数字值,再执行加减1的操作。字符串变量变成数值变量。

  • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数值变量。

  • 在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变成数值变量
  • 在应用于布尔值true时,先将其转换为1再执行加减1的操作。布尔值变成数值变量
  • 在应用于浮点数值时,执行加减1的操作。
  • 在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则。对象变量变成数值变量。

        var s1 = "2";    var s2 = "z";    var b = false;    var f = 1.1;    var o = {           valueOf: function() {          return -1;         }     };          s1++;   //value becomes numeric 3    s2++;   //value becomes NaN    b++;    //value becomes numeric 1    f--;    //value becomes 0.10000000000000009    o--;    //value becomes numeric ?  



    位操作符

  • 存储负数的二进制码采用的格式是二进制补码,1求这个数绝对值的二进制码2.求绝对值二进制码的二进制反码3.得到的二进制反码加1.

  • 按位非(NOT):按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。

     var num1=25; var num2=~num1; alert (num2);  //按位非操作的本质:操作数的负值减1.
  • 按位与(AND):按位与操作符由一个和号字符(&)表示,它有两个操作符数。

    var result= 5 & 3;alert (result);
  • 按位或(OR):按位或操作符由一个(|)表示。

    var result= 5 | 3;alert (result);
  • 按位异或:按位异或操作符由一个插入符号(^)表示。

    var result= 5^ 3;alert (result);  //26
  • 左移、右移、无符号左移、无符号右移



    布尔操作符(布尔操作符一共有三个:非、与、或)

  • 逻辑非,由一个(!)叹号表示。

  • 如果操作数是一个对象,返回false;

  • 如果操作数是一个空字符串,返回true;如果操作数是一个非空字符串,返回false

  • 如果操作数是数值0,返回true,如果操作数是个任意非0数值(包括Infinity),返回false. 如果操作数是null,返回true
  • 如果操作数是NaN,返回true 如果操作数是undefined,返回true

        alert(!false);      //true    alert(!"blue");     //false    alert(!0);          //true    alert(!NaN);        //true    alert(!"");         //true    alert(!12345);      //false

    同时使用两个逻辑非操作符,相当于模拟一个Boolean()函数

    2.逻辑与(&&)

  • 如果第一个操作数是对象,则返回第二个操作数;

  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。



    乘性操作符(三种乘性操作符:乘法、除法和求模)

    -1.乘法

  • 如果操作数都是数值,执行常规的乘法计算,数值超出范围返回Infinity或-Infinity

  • 如果有一个操作数是NaN,则结果是NaN;
  • 如果是一个Infinity和0相乘,则结果是NaN;
  • 如果是一个Infinity和非0数值相乘,结果是Infinity或-Infinity
  • 如果是Infinity和Infinity相乘,结果是Infinity
  • 如果有一个操作数不是数值,则在后台调用Number(),将其转换

    -2.除法

  • 如果操作数都是数值,执行常规的乘法计算,数值超出范围返回Infinity或-Infinity

  • 如果有一个操作数是NaN,则结果是NaN; 如果是Infinity被Infinity整除,则结果是NaN;
  • 如果是零被零整除,则结果是NaN; 如果是非零的有限数被零除。则结果是Infinity或-Infinity;
  • 如果是Infinity被任何非零数值除,则结果是Infinity或-Infinity

    3.求模

  • 如果操作数都是数值,执行常规的计算

  • 如果被除数是无穷大值而除数是有限大数值,结果是NaN;
  • 如果被除数是有限大数值,除数是0,则结果是NaN
  • 如果Infinity和Infinity除,结果是NaN;
  • 如果被除数是有限大数值而除数是无穷大数值,结果是被除数
  • 如果有一个操作数不是数值,则在后台调用Number(),将其转换



    加性操作符
    1.加法

  • 如果有一个操作数是NaN,则结果是NaN;

  • 如果是Infinity加Infinity,结果是Infinity;
  • 如果是-Infinity加-Infinity,结果是-Infinity;
  • 如果是Infinity加-Infinity,则结果是NaN;
  • 如果是+0加+0,结果是+0;如果是-0加-0,结果是-0;如果是+0加-0,结果是+0
  • 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来
  • 如果有只有一个操作数是字符串,则将另一个操作数转换成字符串,然后再将两个字符串拼接起来
  • 如果有一个操作数是对象、数值、或布尔值,则调用他们的toString()方法取得相应的字符串值,再应用前面的字符串规则。对于undefined和null,则分别调用toString(),取得”undefined”、”null”。

    var result1 = 5 + 5;     //two numbersalert(result1);           //10var result2 = 5 + "5";   //a number and a string alert(result2);           //"55"

    注意一个例子:

       var num1 = 5;   var num2 = 10;   var message = "The sum of 5 and 10 is " + num1 + num2;   alert(message);    //"The sum of 5 and 10 is 510"

    每个加法操作都是独立执行的 ,用一个字符串去加一个数字,得到一个字符串,再去加数字,得到的还是字符串,所以如果想得到15,就要适当的运用圆括号

        var num1 = 5;    var num2 = 10;    var message = "The sum of 5 and 10 is " + (num1 + num2);    alert(message);    //"The sum of 5 and 10 is 15"

2.减法

  • 如果有一个操作数是NaN,则结果是NaN;
  • 如果是Infinity减Infinity,结果是NaN;
  • 如果是-Infinity减-Infinity,结果是NaN;
  • 如果是Infinity减-Infinity,则结果是Infinity;
  • 如果是+0减+0,结果是+0;如果是-0减-0,结果是+0;如果是+0减-0,结果是+0
  • 如果有一个操作数是字符串、布尔值、null或undefined,则现在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算,如果转换的结果是NaN,则减法的结果是NaN;
  • 如有一个操作数是对象,则调用对象的valueOf()方法取得表示该对象的数值。如有NaN,则减法的结果就是NaN。如对象没有valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值。

    var result1 = 5 - true;    //4 because true is converted to 1 var result2 = NaN - 1;     //NaNvar result3 = 5 - 3;       //2var result4 = 5 - "";      //5 because "" is converted to 0 var result5 = 5 - "2";     //3 because "2" is converted to 2var result6 = 5 - null;    //5 because null is converted to 0



    关系操作符

  • 如果都是数值,则数值间进行比较
  • 如果操作数都是字符串,则比较两个字符串之间对应的字符编码值

    var result="23"<"3"  //true
  • 如果一个是数值,则将另一个转换为数值,进行比较

     var result="23"<3     //false  因为"23"会转换为数字23,再与3比较
  • 如有一个操作数是对象,则调用这个对象的valueOf()方法,用前面规则比较,如果没有valueOf(),用toString()

  • 如果操作符是布尔值,先转换为数值,再比较。

    var result1="a"<3  //falsevar result2="a">=3  //false

    是因为字母”a”不能转换为合理的数值,于是就被转换为了NaN,然而在于NaN进行比较时,操作的结果都返回了false.



    相等操作符(相等操作符”==”:先转换再比较;全等操作符”===”只比较不转换)

  • null和undefined是相等的

  • 要比较相等性之前null和undefined不能被转换成任何值
  • 如有一个操作数是NaN,则相等操作符返回false,则不相等操作返回true。即使两个操作数都是NaN,相等操作符也返回false,因为NaN不等于NaN
  • 如果两个操作数都是对象,则比较他们是不是同一个对象、如果指向同一个对象,则相等操作符返回true,否则返回false.



    条件操作符


    逗号操作符
    使用逗号操作符可以在一条语句中执行多个操作

     var num1=1,num2=2,num3=3 var num=(5,3,4,2,1,0)  // num值为0

关于toString:

/数组var array = ["CodePlayer", true, 12, -5];document.writeln( array.toString() ); // CodePlayer,true,12,-5// 日期var date = new Date(2013, 7, 18, 23, 11, 59, 230);document.writeln( date.toString() ); // Sun Aug 18 2013 23:11:59 GMT+0800 (中国标准时间)// 日期2var date2 = new Date(1099, 7, 18, 23, 11, 59, 230);document.writeln( date2.toString() ); // Fri Aug 18 1099 23:11:59 GMT+0800 (中国标准时间)// 数字var num =  15.26540;document.writeln( num.toString() ); // 15.2654// 布尔var bool = true;document.writeln( bool.toString() ); // true// Objectvar obj = {name: "张三", age: 18};document.writeln( obj.toString() ); // [object Object]// HTML DOM 节点var eles = document.getElementsByTagName("body");document.writeln( eles.toString() ); // [object NodeList]document.writeln( eles[0].toString() ); // [object HTMLBodyElement]

关于valueOf():
valueOf 的用法

阅读全文
0 0