(6) 运算符

2019-04-05  本文已影响0人  汨逸

运算符

根据运算符的数量分为:一元运算符、二元运算符、三元运算符

根据运算符的功能分为:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件运算符、位运算符

本章节根据功能总结运算符。

1. 算术运算符:+ - * / % ++ --

  1. +、-、*、/、%跟数学的算术运算符没有区别

    3 + 5 = 8
    10 - 4 = 6
    3 * 4 = 12
    12 / 4 = 3
    12 % 5 = 2   // 取余
    
  2. ++、--

    var num = 3;
    num++;
    console.log(num);    // 4
    
    var num = 3;
    ++num;
    console.log(num);    // 4
    
    var num = 3;
    --num;
    console.log(num);    // 2
    
    var num = 3;
    num--;
    console.log(num);    // 2
    

    由上面例子得出:无论++、--,或者是++、--在前在后,其结果都是自身增加1或者自身减1

那么++、--在前或者在后的区别是什么呢?

var num = 3;
console.log(num++);  // 3
console.log(num);    // 4

由上面例子得出:++在后,console.log()先输出num的值,之后num的值自增1变成了4

var num = 3;
console.log(++num);  // 4
console.log(num);    // 4

由上面例子得出:++在前,console.log()先自增1变成4,之后再输出num的值。

​ 再做个练习

var num = 3;
var res = num + num++;
console.log(num);   // 4 只需要关注num++有多少次,则可以获得num的值(++有一次,则num为4)
console.log(res);   // 6 num++的++在后,会先和前面的num做求和,在自增,结果就是 3 + 3 = 6
var num = 3;
var res = ++num + num++;
console.log(num);   // 5 只需要关注num++有多少次,则可以获得num的值(++有两次,则num为5)
console.log(res);   // 8 
第一个++num,num得到结果4,++在前,做中间+运算的值应该是4
第二个num++,num得到结果5,++在后,做中间+运算的值应该是4
4 + 4 = 8;

上述例举的都是++运算,--同理,只不过替换为对应的减法运算即可

注意事项

  1. 任何值都可以做算术运算(使用Number()的转换原则

    2 + true = 3;    // true会被隐性转换为1
    5 - '1' = 4
    '3' * '4' = 12
    '12' / 6 = 2;
    
    var o = { valueOf: function () { return 1; } };
    o + 1 = 2;   // 先调用o的valueOf方法,得到NaN,继续调用toString方法
    
    var num = true;
    num++;   // num = 2;
    
    '12a' / 4 = NaN; // '12a'被转换为NaN,NaN与任何值运算都为NaN
    
  2. +的特殊性

    3 + 5 = 8;   // 加法运算
    3 + '5' = 35;    // 连接运算
    

    总结:+两侧是数值类型,执行加法运算,+两侧不是数值类型,执行连接运算

  3. tips:巧妙转换其他类型为数值类型

    '3' * 1 = 3;
    '2' - 0 = 2;
    

2. 赋值运算符:= += -= *= /= %= <<= >>= >>>=

var sum = 0;
sum += 5;    // 等价于 sum = sum + 5
sum -= 5;    // 等价于 sum = sum - 5;
sum *= 5;    // 等价于 sum = sum * 5;
sum /= 5;    // 等价于 sum = sum / 5;
sum %= 5;    // 等价于 sum = sum % 5;

var num = 3;
num <<= 5;    // 等价于 num = num <<= 5;
num >>= 5;    // 等价于 num = num >>= 5;
num >>>= 5;    // 等价于 num = num >>>= 5;

3. 比较运算符 == === != !== > < <= > >=

比较运算符跟数据的比较也是一致的,我们主要说说其中需要注意的点

  1. ==和===区别

    ==和!=:先转换在比较

    ===和!==:仅比较不转换

    var num1 = 3;
    var num2 = '3';
    
    num1 == num2;    // true
    num1 === num2;   // false
    
    特殊比较:
    null == undefined;   // true
    null === undefined;  // false
    
  2. 对象的比较

    var obj1 = { title: 'Modeest' };
    var obj2 = { title: 'Modeest' };
    console.log(obj1 == obj2);   // false
    console.log(obj1 === obj2);  // false
    

    注意:obj1和obj2值相同,但是在计算机中存在两块内存地址,这里比较他们的地址,所以为false

    var obj1 = { title: 'Modeest' };
    var obj2 = obj1;
    console.log(obj1 == obj2);   // true
    console.log(obj1 === obj2);  // true
    

    此处obj1和obj2是引用赋值,在计算机中指向同一块地址,比较结果为true

4. 逻辑运算符(布尔操作符)

注意事项:

  1. 关注返回结果

    true && false    // false
    3 && 0   // 0
    true && ''   // ''
    
    true || false    // true
    3 || true    // 3
    0 || 'name'  // 'name'
    

    总结:逻辑与和逻辑或运算符,对两侧的值进行隐性转换,但是最终结果还是取值本身,不会获取隐性转换结果

5. 条件运算符(三元运算符)

boolean_expression ? true_value : false_value

var num = 5 > 3 ? 5 : 3;
console.log(num);   // 5

6. 位运算符

待续。。。

7. 运算符优先级

运算符优先级
上一篇 下一篇

猜你喜欢

热点阅读