回顾操作符

你真的理解操作符吗? 我敢说我没有

一元操作符

操作符

let a = 1;
     a++;
     a--;
     a+=1;

tip: 对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。

对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。

对于布尔值,如果是false,则转换为0再应用改变。变量类型从布尔值变成数值

对于布尔值,如果是true,则转换为1再应用改变。变量类型从布尔值变成数值。

 对于浮点值,加1或减1。

一元加和减

let a=1;
    a +=1;
    a -= 1;

布尔操作符

逻辑非

    console.log(! false);    // true
    console.log(! "blue");   // false
    console.log(!0);         // true
    console.log(! NaN);      // true
    console.log(! "");        // true
    console.log(!12345);    // false

逻辑非逻辑非操作符由一个叹号!这个操作符始终返回布尔值,无论应用到的是什么数据类型。逻辑非操作符首先将操作数转换为布尔值,然后再对其取反。

 如果操作数是对象,则返回false。

 如果操作数是空字符串,则返回true。

如果操作数是非空字符串,则返回false。

如果操作数是数值0,则返回true。

如果操作数是非0数值(包括Infinity),则返回false。

如果操作数是null,则返回true。

如果操作数是NaN,则返回true。

 如果操作数是undefined,则返回true。

逻辑与

逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值

    let found = true;
    let result = (found && someUndeclaredVariable); // 这里会出错
    console.log(result); // 不会执行这一行
        letfound=false;
    let result = (found && someUndeclaredVariable);   // 不会出错
    console.log(result);   // 会执行

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

 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象。

 如果两个操作数都是对象,则返回第二个操作数。

如果有一个操作数是null,则返回null。

如果有一个操作数是NaN,则返回NaN。

 如果有一个操作数是undefined,则返回undefined。 

逻辑或

与逻辑与类似,如果有一个操作数不是布尔值,那么逻辑或操作符也不一定返回布尔值。它遵循如下规则。

如果第一个操作数是对象,则返回第一个操作数。

 如果第一个操作数求值为false,则返回第二个操作数。

如果两个操作数都是对象,则返回第一个操作数。

如果两个操作数都是null,则返回null。

 如果两个操作数都是NaN,则返回NaN。

 如果两个操作数都是undefined,则返回undefined。

数学操作符

乘法操作符

如果操作数都是数值,则执行常规的乘法运算,即两个正值相乘是正值,两个负值相乘也是正值,正负符号不同的值相乘得到负值。

如果有任一操作数是NaN,则返回NaN。

如果是Infinity乘以0,则返回NaN。

如果是Infinity乘以非0的有限数值,则根据第二个操作数的符号返回Infinity或-Infinity。

如果是Infinity乘以Infinity,则返回Infinity。

如果有不是数值的操作数,则先在后台用Number()将其转换为数值,然后再应用上述规则。

.除法操作符

 如果操作数都是数值,则执行常规的除法运算,即两个正值相除是正值,两个负值相除也是正值,符号不同的值相除得到负值。

如果有任一操作数是NaN,则返回NaN。

 如果是Infinity除以Infinity,则返回NaN。

如果是0除以0,则返回NaN。

 如果是非0的有限值除以0,则根据第一个操作数的符号返回Infinity或-Infinity。

 如果是Infinity除以任何数值,则根据第二个操作数的符号返回Infinity或-Infinity。

如果有不是数值的操作数,则先在后台用Number()函数将其转换为数值,然后再应用上述规则。

取模操作符

    letresult=26%5;//等于1

如果操作数是数值,则执行常规除法运算,返回余数。

如果被除数是无限值,除数是有限值,则返回NaN。

如果被除数是有限值,除数是0,则返回NaN。

 如果是Infinity除以Infinity,则返回NaN。

 如果被除数是有限值,除数是无限值,则返回被除数。

如果被除数是0,除数不是0,则返回0。

 如果有不是数值的操作数,则先在后台用Number()函数将其转换为数值,然后再应用上述规则。 

 关系操作符

    let result = "23" < "3"; // true
    23 <3  //false

 如果操作数都是数值,则执行数值比较。

 如果操作数都是字符串,则逐个比较字符串中对应字符的编码。

如果有任一操作数是数值,则将另一个操作数转换为数值,执行数值比较。

如果有任一操作数是对象,则调用其valueOf()方法,取得结果后再根据前面的规则执行比较。如果没有valueOf()操作符,则调用toString()方法,取得结果后再根据前面的规则执行比较。

如果有任一操作数是布尔值,则将其转换为数值再执行比较。 

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值