zoukankan      html  css  js  c++  java
  • JS基本概念 -- 操作符 -- 一元操作符

    ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加减)、位操作符、关系操作符、相等操作符。ECMAScript操作符能够适用于很多值,例如字符串、数字值、布尔值甚至对象。不过在应用于对象时,相应的操作符通常会调用对象的valueOf() toString()方法,以便取得可操作的值。

    1. 一元操作符

    只能操作一个值的操作符叫做一元操作符。

    • 递增和递减操作符
      • 前置型
        //1. 前置递增操作
        var age = 29;
        alert(++age);    //30
        /*
         * 在这个例子中,前置递增操作符把age的值变成了30,
         * 实际上,执行这个前置递增操作与执行以下操作的效果相同
         */
        var age = 29;
        age = age + 1;
        
        
        //2. 前置递减操作
        var age = 29;
        alert(--age);    //28
        /*
         * 在这个例子中,前置递减操作符把age的值变成了28,
         * 实际上,执行这个前置递减操作与执行以下操作的效果相同
         */
        var age = 29;
        age = age - 1;

        执行前置递增和递减操作符时,变量的值都是在语句被求值以前改变的。

        //前置递增和递减操作 与执行语句的优先级相等,因此整个语句从左至右被求值
        var age = 29;
        var anotherAge = --age +2;
        
        alert(age);    //28
        alert(anotherAge);//30
        
        var num1 = 2;
        var num2 = 20;
        var num3 = --num1 + num2;
        var num4 = num1 + num2;
        
        alert(num3);    //21
        alert(num4);    //21
      • 后置型:递增和递减操作是在包含他们的语句被求值之后执行的
        var age = 29;
        alert(age++);    //29
        
        /*
         * 把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作
         * 但当语句中还包含其他操作符时,上述区别就会非常明显了
         */
        var num1 = 2;
        var num2 = 20;
        var num3 = num1-- + num2;
        var num4 = num1 + num2;
        
        alert(num3);    //22
        alert(num4);    //21

        这四个操作符不仅适用于整数,还可以用于字符串、布尔值、浮点数和对象。在应用于不同值时,递增和递减操作符遵循下列规则。

        //1. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字,在执行加减1的操作,字符串变量变成数值变量
        var str1 = "123";
        alert(++str1);    //124
        
        var str2 = "0xa";    
        alert(++str2);    //11 可以识别十六进制数
        
        var str3 = "070";
        alert(++str3);    //71
        
        
        //2.在应用于一个不包含有效数字字符的字符串时,将变量值设置为NaN。字符串变量变成数值变量
        var str1 = "123ab";
        alert(++str1);    //NaN
        
        var str2 = "ab123";
        alert(++str2);    //NaN
        
        var str3 = "chen";
        alert(++str3);    //NaN
        
        
        //3.在应用于Boolean时,false转换成0,true转换成1,在执行加减1操作。布尔变量变成数值变量
        var b1 = false;
        alert(++b1);    //1
        
        var b2 = true;
        alert(++b2);    //2
        
        //4.在应用于浮点数值时,执行加减1操作
        var f = 1.1;
        alert(--f);    //0.10000000000000009(由于浮点舍入错误所致)
        
        
        /*
         *5.在应用于对象时,先调用对象的valueOf()方法,以取得一个可供操作的值,
         *  然后对改值应用前述规则。
         *  如果结果是NaN,则调用toString()方法后再应用前述规则。
         *  
         */
        var o = {
            valueOf: function(){
                return -1;
            }
        };
        
        alert(--o);    //-2
        alert(typeof o);//number
    • 一元加和减操作符
      • 一元加操作符以一个加号(+)表示,放在数值的前面,对数值不会产生任何影响。在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。
        var num = 25;
        num = +num;
        alert(num);    //25
        
        var s1 = "01";
        alert(+s1);    //1   值变成数值1
        alert(typeof s1);//string
        alert(typeof +s1);//number
        
        var s2 = "1.1";
        alert(+s2);    //值变成数值1.1
        
        var s3 = "z";
        alert(+s3);    //值变成NaN
        
        var b = false;
        alert(+b);    //值变成数值0
        
        var f = 1.1;
        alert(+f);    //    1.1  值未变
        
        var o = {
            valueOf: function(){
                return -1;
            }
        }
        alert(+o);    //值变成数值-1
      • 一元减操作符主要用于表示负数。在用于非数值时,遵循与一元加操作符相同的规则。
        var num = 22;
        num = -num;
        alert(num);    //-22
        
        var s1 = "01";
        alert(-s1);    //值变成了数值-1
        
        var s2 = "1.1";
        alert(-s2);    //值变成了数值-1.1
        
        var s3 = "cc";
        alert(-s3);    //值变成了NaN
        
        var f = 1.1;
        alert(-f);    //变成了-1.1
        
        var b = true;
        alert(-b)    //值变成了-1
        
        var o ={
            valueOf: function(){
                return -1;
            }
        }
        alert(-o);//值变成了数值1
  • 相关阅读:
    arm基础知识1
    安装Yellowfin报错——No such file or directory: '/tmp/pip-build-jykvuD/YellowFin/README.md'
    下载kaggle数据集,验证手机号
    调参必备---GridSearch网格搜索
    sklearn.metrics.roc_curve
    & | and or
    16个推荐系统开放公共数据集整理分享
    tensorflow ConfigProto
    python __future__ 使用
    tf idf公式及sklearn中TfidfVectorizer
  • 原文地址:https://www.cnblogs.com/PrajnaParamita/p/5829713.html
Copyright © 2011-2022 走看看