js按使用场景的不同将运算符分成了很多种类型:算术运算符、赋值运算符、关系(比较)运算符、逻辑运算符
算术运算符
var result = 2 ** 3 // 2的3次方
赋值运算符
= 被称之为 赋值( assignments )运算符, 语句 x = value 将值 value 写入 x 然后返回 x
// 链式赋值:从右到左进行计算
var num1 = num2 = num3 = 22
console.log(num1,num2,num3) // 22 22 22
原地修改
// 原地修改:要对一个变量做运算,并将新的结果存储在同一个变量中
var num = 10
num = num + 10 // num = 20
num += 10 // num = 20
num *= 10 // num = 100
自增、自减
自增/自减只能应用于变量。将其应用于数值(比如 5++)则会报错。
// 自己自增和自减是没有区别的
// 自增
var num = 2
num ++ // num = 3
// 自减
var num2 = 3
num2 -- // num = 2
var num3 = 9
--num3 // num3 = 8
//自增和自减表达式本身又在其他的表达式中,就有区别
var number = 3
var result1 = 10 + number++ // 先赋值再自增:result1 = 13
/*
建议这样写
var result = 10 + number
number++
*/
var result2 = 10 + ++number // 先自增再赋值:result2 = 14
/*
建议这样写
number++
var result = 10 + number
*/
运算符的优先级
所有运算符的优先级:
developer.mozilla.org/zh-CN/docs/…
比较运算符
== 和 === 的区别
它不能区分出 0 和 false,或者空字符串和 false这类运算,
// 会进行隐式转换:在类型不相同的情况下,会先转成Number的值,再比较,
console.log('' == 0) // ''->0 ture
console.log(false == 0) // false->0 ture
// === 在进行比较时不会做任何的类型转换,类型不同直接返回false
console.log(0 === '0') // false
null == undefined // ture
// Object/Null会先转为原始类型,null默认会返回原来的值,
'abc' == Object/Null // false
var info = {
name:'www',
age:18
[Symbol.toPrimitive]() {
return 123
}
}
console.log(123 == info) // ture