0
点赞
收藏
分享

微信扫一扫

JavaScript操作符

半夜放水 2022-03-19 阅读 57

算数运算符

  • + -* / % ()
  • %:取余,取模。a / b = c 余d,就说a % b = d。
  • 运算顺序:先算乘除取余、再算加减,有小括号先算小括号。

正常情况下运算(按照数学计算方法)

  • 数字与数字之间的运算。

非正常情况

Number类型参与运算

  • 有特殊值字面量参与的运算。
  • NaN参与的运算:得到的结果都是NaN
  • Infinity参与的运算,视情况而定
		console.log(Infinity + 5); //Infinity
        console.log(Infinity - 5); //Infinity
        console.log(Infinity * 5); //Infinity
        console.log(Infinity / 5); //Infinity
        console.log(Infinity % 5); //不确定返回NaN

其他类型的数据参与数学运算

  • 有字符串参与的+ 运算:+ 号变为连字符将前后连接成整体字符串。
  • 隐式转换:除了字符串参与的+ 运算,其他情况下,所有其他数据类型参与数学运算时,计算机暗中将其他数据类型先自动转换成数字类型,再参与运算,这个过程中不需要使用parseInt()、Number() 等方法,过程是暗中进行,这就是一个隐式转换的过程。
		console.log(1 + "2"); //12
        console.log(1 - "2"); //-1
        console.log(1 * "2"); //2
        console.log(1 / "2");//0.5
        console.log(1 % "2");//1
        console.log(1 - "");//1
        console.log(1 - "   ");//1
        console.log(1 - "12abc");//NaN

隐式转换

其他的数据类型会隐式转换为数字类型:

  • 对应数字:纯数字字符串会转为对应的数字”123”→123
  • 转换为1:true
  • 转换为0:false、null、“”空字符串、空白字符串
  • 转换为NaN:undefined、非空非纯数字字符串

比较运算符(关系运算符-返回值为布尔类型(true/flase))

图片加载失败

正常情况下运算(按照数学比较方法进行比较)

  • 数字与数字比较

非正常情况下

特殊值参与比较运算

  • NaN参与:不等于和不全等于结果是true,其他的都得到false。
  • Infinity参与的运算,视情况而定

其他类型的数据参与比较运算

  • 其他数据类型也会隐式转换为数字参与比较。
  • null 的判断比较特殊:null 与0 判断时,相等判断为false,>= 和<= 判断为true
  • null == undefined

字符串与字符串比较

  1. 不会发生隐式转换为数字,而是比较两个字符串的Unicode 编码顺序。
  2. 字符编码顺序:从前往后0-9,A-Z,a-z,前面的小于后面的。
  3. 比较时,不关心两个字符串的长度,从第一个字符开始比较,依次往后顺延比较,直到比较出大小,就不再往后比较。

比较运算符运算顺序

从前往后比较,前面的结果与后面的进行比较。

逻辑运算符(返回bool类型)

图片加载失败

正常情况下运算

  • 布尔类型的值参与运算,返回值为布尔值。

非正常情况下运算(隐式转换为bool)

  • 转为false:NaN、0、“”空字符串、null、undefined
  • 转为true:非0 非NaN、数字、非空字符串
  • 当它们用于非布尔值的时候,返回值就可能是非布尔值。其实这种运算非常简单,就两句话(不管b的类型和值,直接返回b。比如b为数字5,返回数字5):
  1. (逻辑与a&&b) 如果a能被转换为false,那么返回a;否则,返回b。
  2. (逻辑或a ||b ) 如果a能被转换为true,那么返回a;否则,返回b。

逻辑运算符运算顺序

  • 同种运算符从前往后运算。
  • 综合运算顺序:非、与、或。

赋值运算符

即定义变量,给变量值。例如
var a=2;//a的值为2
a +=1;// a的值为3
其他运算符与+=一样
图片加载失败

一元运算符

  • ++ 和–也叫一元运算符,只有一个操作数。
  • ++ 或–符号可以写在变量前和变量后面,位置不同可能导致程序运行结果不同。
  • a++: ++ 符号在变量之后,a++ 在参与程序过程中使用的原始没有加1 的值,使用完后第二次用a 变量时,a 用的就是加1 后的新值。先参与,后自加。
  • ++a:++ 符号在变量之前,++a 在参与过程中整体就使用a 加1 之后的新值,使用完后第二次用a 变量时,a 用的也是加1 的新值。先自加,后参与。
		var a = 1, b = 2;
        var c = a++ + b; //a以1参与运算
        var c = ++a + b; //a以2参与运算
        var c = a++ + b + ++a; //第一个a以1参与运算,第二个a以3参与运算

图片加载失败

运算优先级(综合运算顺序)

图片加载失败

 // () → 一元 → 算术 → 比较 → 逻辑 → 赋值
    var a = 4;
    var num = 1 * (2 + 3) && ++a || 5 > 6 && 7 < 8 || !9;
    // num = 1 * 5 && ++a || 5 > 6 && 7 < 8 || !9
    // num = 1 * 5 && 5 || 5 > 6 && 7 < 8 || false
    // num = 5 && 5 || 5 > 6 && 7 < 8 || false
    // num = 5 && 5 || false && true || false
    // num = 5 || false || false
    // num = 5
    console.log(num);

笔记输出来源:拉勾前端训练营

举报

相关推荐

0 条评论