Javascript高级之操作符

操作符

一元操作符

  • 概念
    • 只操作一个值的操作符叫一元操作符
    • 一元运算会直接修改原始变量的数据

递增/递减操作符

  • 前缀操作运算

    • 前缀++ 先加1,后参与运算
    • 前缀-- 先减1,后参与运算
    • 无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变
    • 在计算机科学中,这通常被称为具有副作用
  • 后缀操作运算

    • 后缀++ 先参与运算,后加1
    • 后缀-- 先参与运算,后减1

一元加和减

  • 一元加
    • 对数值没有任何影响
    • 一元加应用到非数值,则会执行与使用Number()转型函数一样的类型转换
let s1= '01',
    s2= '1.1',
    s3= 'z',
    b= false,
    f= 1.1,
    o= {
      valueOf(){
        return -1;
      }
    };

console.log(+s1);
console.log(+s2);
console.log(+s3);
console.log(+b);
console.log(+f);
console.log(+o);
  • 一元减
    • 用于把数值变为负值
    • 一元减应用到非数值,会遵循一元加的规则,再取负值
let s1= '01',
    s2= '1.1',
    s3= 'z',
    b= false,
    f= 1.1,
    o= {
      valueOf(){
        return -1;
      }
    };

console.log(-s1);
console.log(-s2);
console.log(-s3);
console.log(-b);
console.log(-f);
console.log(-o);

布尔操作符

  • 逻辑非

    • 逻辑非操作首先将操作数转换为布尔值,再对其取反
    • 逻辑非操作符可以用于把任何值转换为布尔值
  • 逻辑与

    • 逻辑与操作符可用于任何类型的操作数,不限于布尔值
    • 如果操作数不是布尔值,则逻辑与并不一定会返回布尔值
      • 如果第一个操作数是对象,则返回第二个操作数
      • 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象
      • 如果两个操作数都是对象,则返回第二个操作数
      • 如果有一个操作数是null,则返回null
      • 如果有一个操作数是NaN,则返回NaN
      • 如果有一个操作数是undefined,则返回undefined
let res= {'name':'Sunny'} && 'Jerry';
console.log(res);     // Jerry

let res= 'Jerry' && {'name':'Sunny'};
console.log(res);    // { name: 'Sunny' }

let res= {'name':'Jerry'} && {'name':'Sunny'};
console.log(res);   // { name: 'Sunny' }

let res= {'name':'Jerry'} && null;
console.log(res);   // null

let res= {'name':'Jerry'} && NaN;
console.log(res);   // NaN

let res= {'name':'Jerry'} && undefined;
console.log(res);   // undefined
  • 逻辑或
    • 如果操作数不是布尔值,则逻辑或并不一定会返回布尔值
      • 如果第一个操作数是对象,则返回第一个操作数
      • 如果第一个操作数求值为false,则返回第二个操作数
      • 如果两个操作数都是对象,则返回第一个操作数
      • 如果两个操作数都是null,则返回null
      • 如果两个操作数都是NaN,则返回NaN
      • 如果两个操作数都是undefined,则返回undefined
let res= {'name':'Sunny'} || 'Jerry';
console.log(res);     // { name: 'Sunny' }

let res= '' || {'name':'Sunny'};
console.log(res);    // { name: 'Sunny' }

let res= {'name':'Jerry'} || {'name':'Sunny'};
console.log(res);   // { name: 'Jerry' }

let res= null || null;
console.log(res);   // null

let res= NaN || NaN;
console.log(res);   // NaN

let res= undefined || undefined;
console.log(res);   // undefined

短路现象

  • 逻辑与

    • 如果第一个操作数决定了结果,那么不会对第二个操作数求值
    • 第一个操作数为false,第二个操作数不作为
  • 逻辑或

    • 如果第一个操作数决定了结果,那么不会对第二个操作数求值
    • 第一个操作数为true,第二个操作数不作为
  • 逻辑或的短路应用

    • let obj= preObj || bacObj
    • 如果首选对象不为空,则返回首选对象,被选对象不作为

乘性操作符

  • 分类
    • 乘法操作符
    • 除法操作符
    • 取模操作符

指数操作符

  • 指数操作符的表现形式
    • Math.pow()
    • **
const num= 4;

console.log(num**2);                // 16
console.log(Math.pow(num, 2));      // 16

console.log(num**0.5);              // 2
console.log(Math.pow(num, 0.5));    // 2

加性操作符

  • 分类
    • 加法操作符
    • 减法操作符

关系操作符

相等操作符

  • 分类
    • 等于和不等于:只进行值得比较
    • 全等和不全等:类型和值同时相等,则相等

条件操作符

let max= (num1>num2)?num1:num2;

赋值操作符

逗号操作符

  • 概念
    • 逗号操作符可以用来在一条语句中执行多个操作
    • 在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值
let num= (1, 2, 3, 4, 5);
console.log(num);    // 5

操作符优先级

  • 优先级从高到底
    • 括号 ()
    • 一元运算符 ++ -- !
    • 乘性运算符 * / %
    • 加性运算符 + -
    • 关系运算符 > >= < <=
    • 相等运算符 == != === !==
    • 逻辑运算符 先&& 后||
    • 赋值运算符
原文地址:https://www.cnblogs.com/SharkJiao/p/14157203.html