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

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 numbers
    alert(result1);           //10
    var 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;     //NaN
    var result3 = 5 - 3;       //2
    var result4 = 5 - "";      //5 because "" is converted to 0
     var result5 = 5 - "2";     //3 because "2" is converted to 2
    var 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  //false
    var 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 (中国标准时间)

// 日期2
var 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

// Object
var 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值