美文网首页
JS第二天

JS第二天

作者: 清枫_小天 | 来源:发表于2016-09-03 23:30 被阅读71次

    对象到其他类型之间的数据转换

    对象到boolean

    • 非空对象 是true
    • 空对象(是null,不是{}) false

    对象到字符串

    • 调用对象的toString方法。
      String(o);//String()调用o的toString();
      o.toString();//o调用自身的toString()方法

    对象到number

    • 使用Number()转换
    • 如果对象既没有重写toString()方法,也没有重写valueOf(),返回NaN
      var o = {
      name : "briup",
      age :22
      };
      Number(o); // NaN
    • 如果对象只重写了toString()方法,没有重写valueOf()方法,将获
      取到toString()返回的值,然后对该值进行转换
      var o = {
      name : "briup",
      age :22,
      toString:function(){
      return "1";
      }
      };
      Number(o);
      // 默认转换o.toString(),既Number("1"),结果为 1
    • 如果对象既重写了toString()方法,也重写了valueOf()方法,或者仅
      重写了valueOf()方法,将调用valueOf(),并且取得返回值,对该返回
      值进行转换
      var o = {
      name : "briup",
      age :22,
      toString:function(){
      return "1";
      },
      valueOf:function(){
      return false;
      }
      };
      Number(o); // 默认转换o.valueOf(),既Number(false),结果为 0
    • parseInt()/parseFloat()
      始终调用toString()将其返回值进行parseInt()转换

    操作符

    一元操作符

    ++,--,+,-操作符应用任何类型数值都返回一个数值类型,先将任意类型的值转换为Number
    然后进行运算

    递增 ++

    • 前置:操作该变量之前进行递增或者递减操作
    • 后置:操作该变量之后进行递增或者递减操作

    对任意数据类型的操作数都适用,使用前先将其转换为数字(Number()),然后再进行运算

    在应用于对象的时候,优先先调用对象的valueOf方法,以取得一个可供操作的值,如果子类
    对象仅重写了toString(),调用该方法。

    递减 --

    • 前置:操作该变量之前进行递增或者递减操作

    • 后置:操作该变量之后进行递增或者递减操作

      对任意数据类型的操作数都适用,使用前先将其转换为数字,然后再进行运算

      在应用于对象的时候,先调用对象的valueOf方法,以取得一个可供操作的值,如果子类
      对象仅重写了toString(),调用该方法。

    加 +

        相当于调用Number();
    var a = "12"
    +a ;    // 12  相当于调用了Number("12")
    

    减 -

        将一元减应用于数值时,数值会变成负数。
        将一元减应用于非数值时,
    遵循与一元加操作符相同的规则,最后将得到的数值转化为负数
    

    布尔操作符, 非(NOT),与(and),或(OR)

    逻辑非 !

        该操作符应用任何类型数值都返回一个布尔值。先将任意类型的数值转换为Boolean,
    然后取反,!a ==> !Number(a)
        !0    //true
    !""    //true    
    !NaN    //true    
    !false    //true
       连用两次逻辑非 ,就可以将任意数据类型转化为Boolean类型,!!a ==> Number(a)
        !!""    //false
    

    逻辑与 && (同真才真,有假则假)

    短路
    可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型

    • 如果第一个操作数是
      null,NaN,undefined,false,0,""可被转换
      为false的值的时候返回该值

    • 如果第一个数其他,返回第二个数

        var s1 = 8;
        var s2 = "briup";
        var s3 = "";
        var result = s1 && s2;    //briup
        var result2 = s3 &&s2;  //空字符串
      

    逻辑或 ||(有真则真,同假才假)

    false ||
    如果两个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值
    如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数

    加性操作符

    加法 +

        m + n
    
    • 当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算

        true + false;      //1;Number(true)+Number(false);
        true + 1;      //2;Number(true) + 1
        null + undefined; //NaN;Number(undefined) -> NaN
      
    • 当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼接

        "1" + true;    // 1true
        "1" + undefined;// 1undefined
        "1" + 1;    // 11
      
    • 当m,n 有一个为对象,如果该对象既重写toString,又重写了valueOf方法,调用valueOf方法获取返回值,
      将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用toString方法获取返回值,
      将该返回值和另外一个操作数进行运算。
      var o = {
      name:"briup",
      valueOf:function(){
      return "1";
      }
      }
      o+1; //2;o+1

    减法 -

    返回值为Number

    无论操作数为任何类型,先将其使用Number()转换器转换为Number类型,然后再计算。

        true - 1;    //0;    1-1
        null - true;    //-1 ;    0-1
        1 - undefined    //NaN
        var o = {
            name:"briup",
            valueOf:function(){
            return 1;
            }
        }
        o-1;        //0;    1-1
    

    乘性操作符

    当操作数为非数值的时候执行自动的类型转化Number()

    乘法 *

    • 如果两个数都是数值,执行常规的乘法计算
    • 如果一个操作数是NaN,结果为NaN
      超过数值范围返回Infinity(Infinity 属性用于存
      放表示正无穷大的数值。
    • 如果有一个操作数不是数值,则在后台先调用Number()将其转换为数值。

    除法 /

    • 如果一个操作数是NaN,结果为NaN (0/0 ; NaN)
      一个非0值除0 Infinity

    • 如果有一个操作数不是数值,则在后台先
      调用Number()将其转换为数值。

            var s1 = 5;
            var s2 = 2;
            var result = s1/s2;  //2.5
      

    取余 %

    • 如果两个数都是数值,执行常规的取余计算
    • 如果一个操作数是NaN,结果为NaN(任意数%0 ; NaN)
    • 如果有一个操作数不是数值,则在后台先调用Number()将其转换为数值。

    关系操作符

    < > <= >= ,返回一个boolean值

    • 如果两个操作数是字符串,比较字符串中对应位置的每个字符的字符编码值

      a -> z
      "10" -> "9"
        "a">"b"    //false
        "1">"a"    //false
      
    • 如果一个操作数是数值,将另外一个操作数也转换为数值进行比较

        "3">1;        //true
        3>true;        //true 3>Number(true)
        3>undefined;    //false Number(undefined)=NaN ;任何数和NaN比较结果都为false
      
    • 如果一个操作数是对象,先调用valueOf(),再调用toString()将返回值与另外一个操作数比较
      如果没有重写toString() valueOf()则始终为false

        var o = {
            name:"briup",
            valueOf:function(){
            return "13";
            }
        }
        o>2        // true ; "13">2
      

    相等操作符

    相等和不相等 ==, != (先转换在比较)

    • 如果有一个数为boolean类型,比较前先转换为数值。
    • 如果一个数为字符串,另外一个数为数值,比较前先将字符串转换为数值
    • 如果两个都是字符串,比较字符序列
    • 如果一个数是对象,另外一个数不是,则调用valuesOf()方法,用得到的基本数据类型进行比较
      null == undefined //true
    • 如果一个数为NaN,相等操作返回为false,不等操作返回true
    • 如果两个数都为对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,返回true

    全等和不全等

        仅比较不转换,先比较两个数所属的数据类型,如果类型不同则不同,如果类型相同
    再继续比较两个数的值
    console.log("55" == 55); true
        console.log("55" === 55);false
    null == undifined;  //false
    

    三目运算符 ? :

       variable = boolean_expression ? true_value : false_value;
     如果boolean_expression为true,将true_value赋给variable,
       否则将false_value赋给variable
           求任意两个数之间最大值
           function max(m,n){
          return m>n?m:n;    //如果m>n为true返回m,如果m>n为false,返回n
           }
    

    赋值运算符 =

       将右侧的值赋给左侧的变量
       可以和其他算术运算符连用 *= /= %= += -= 
       a *= 3;
    

    逗号操作符

       可以在一条语句中执行多个操作
       var num1=1,num2 = 2, num3 = 3;

    相关文章

      网友评论

          本文标题:JS第二天

          本文链接:https://www.haomeiwen.com/subject/jsklettx.html