js - 运算符

242 阅读3分钟

js--运算符

运算元:运算符应用的对象 。比如5*2就有两个运算元,左运算元5,右运算元2。

一元运算符:一个运算符对应的只有一个运算元。比如

let x = 1
x = -x
console.log(x) // -1

二元运算符: 一个运算符拥有两个运算元。 例如:

let x = 1,y= 2;
console.log(y+x) // 3

算术运算符

  • 加法 +,

  • 减法 -,

  • 乘法 *,

  • 除法 /,

  • 取余 %,

  • 求幂 ** ( x**y y除了可以为整数(1或-1),也可以为非整数(½))

    console.log(1+2)   //3
    console.log(2-3)   //-1
    console.log(2*3)   //6
    console.log(5/2)   //2.5
    console.log(5%3)   //2
    console.log(5**2)  //25
    console.log(25**(1/2))  //5
    console.log(25**(-1))  //0.04
    

+可以说是唯一一个支持字符串的运算符。其他算术运算符只对数字起作用,并且总是将其非数值运算元转换为数字。 例如:

'6'/'2'   //3
 6 - '2'  //4

如果加号 +被应用于字符串,它将连接各个字符串。

只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串。例如:

1+'1'  // '11'
2+2+'1'   //'41'

运算符加号应用于单个值,如果值不为数字,会将值转换为数字(效果等同于Number(value))

+'3' // 3
+ 3 // 3
+'ss' //NaN

运算符优先级

如果一个表达式拥有超过一个运算符,执行的顺序则由运算符优先级决定。(一元运算符优先级高于二元运算符)

可以参考优先级表

赋值运算符

赋值运算符的优先级非常低。所以 x = 2*3+1 所有的计算先执行,赋值 =才执行。

=是一个运算符,在js中,大多数的运算符都会返回一个值。比如+,-,对=也是如此。

语句 x= value 将value写入x中返回x。

例如:

let a = 1
let b = 2
let x = 1+(a=a+b) 
a    // 3
x  // 4
var a1 = b1 = c1 = 5
a1 //5
b1 //5
c1 //5

原地修改

我们常常需要计算获取一个值,并将结果存储在同一个变量中。 例如:

let c = 5;
c = c+5  //10

可以用 +=,-=等形式来缩写表示 。这种运算符与普通赋值运算符优先级相同。例如:

let a= 5
a*=2 
a // 10

自增/自减

对一个数加一,减一是比较常见的运算操作。

因此,有一些专门对此的运算符。

自增:++

例如:

let count = 1
count++
count  // 2

自减:--

例如:

let count = 1
count -- 
count // 0

运算符++--既可以放到变量前,也可以放到变量后。

当运算符放到变量前,被称为"前置形式"。++count

当运算符放到变量后,被称为"后置形式"。count--

前置和后置的区别:

两者都做一件事:让变量加一或减一。

前置:返回自增或自减的值。例如:

let count = 5
 let a = ++count
 a // 6
 count // 6

后置:返回自增或自减之前的值。例如:

let count = 5
let a = count++
a // 5
count // 6

如果前置或后置的值不被使用,两者没有什么区别。

let count = 5
count ++ 
count // 6
let a = 5
++a
a // 6

ps:自增/自减 只能用于变量,用于数值会报错。例如:

5++ //Uncaught SyntaxError: Invalid left-hand side expression in postfix operation

逗号运算符

逗号运算符的优先级比赋值运算符还要低。

逗号运算符能让我们处理多个语句,使用 , 将它们分开。每个语句都运行了,但是只有最后的语句的结果会被返回。

let a = 1;
let b = 1
let c 
let d = (c= a+b,3+4)
d // 7
c // 2