JavaScript的基础运算
# 运算符
计算机最基本的操作就是执行运算,执行运算时就需要使用运算符来操作。JavaScript按照使用场景的不同分成了很多种类型
- 算术运算符
- 赋值运算符
- 关系/比较运算符
- 逻辑运算符
# 运算元
运算元是运算符应用的对象,例如 5* 2 有两个运算元5和2,也称为参数。如果一个运算符对应的只有一个运算元,那么它是一元运算符,例如一元运算符负号-
,其作用是对数字进行正负转换。如果一个运算符拥有两个运算元,那么就是二元运算符。
# JavaScript中的运算
# 算术运算符
- 算术运算符用在数学表达式中,
- 算术运算符是对数据进行计算的符号
# 取余(%)和求幂
取余运算符是%
,例如console.log(10 % 3) // 1
求幂运算a ** b
将a提升至a的b次幂,也称为a的b次方
console.log(2**3)
console.log(2**4)
2
# 赋值运算符
=
实际也是一个运算符,被称之为赋值运算符
语句 x=value 将值value写入x然后返回x
链式赋值
let a, b, c;
a = b = c = 2 + 2;
console.log(a, b, c) // 4
2
3
- 链式赋值从右到左进行计算
- 先对最右边的 2+2 求值,然后将其赋值给左边的变量 c , b, a
- 最后所有的变量共享一个值
# 原地赋值
原地赋值:经常需要对一个变量做运算,并将新的结果存储在同一个变量中
// 原地修改
var n = 10
n = n + 5
n = n * 2
2
3
4
使用+=
,*=
修改
var n = 10
n += 5
n *= 2
2
3
所有的算术和位运算符都有简短的"修改并赋值"运算符 /= 和 -= 等。
# 自增和自减
自增 (++)将变量加1
自减 (--) 将变量减1
自增和自减只能应用于变量,将其应用于数值(比如5++)则会报错。
++或者-- 可以置于变量前,也可以置于变量后
只有使用++或者--的返回值才能看到区别
前置形式返回一个新的值,后置返回的是原来的值。
# 比较运算符
在JavaScript中,比较运算符的结果都是Boolean类型的
# 运算符的优先级
运算符放到一起时会有一定的优先级,优先级决定了表达式中运算执行的先后顺序。对应的MDN文档。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
# ===
和==
的区别
普通的相等性检查
==
存在一个问题,它不能区分出0和false,或者空字符串和false这类运算;这是因为在比较不同类型的值时,处于判断符号 == 两侧的值会被先转换为数字;空字符串和false也是如此,转换为数字后都为数字1如果需要区分0和false,需要使用严格相等运算符
===
在进行比较时不会做任何的类型转换;即如果a和b属于不同的数据类型,那么a === b不会做任何的类型转换而立刻返回false“不相等”表示为
!=
,“严格不相等”表示为!==
严格的相等运算符降低了犯错的可能性。
null比较特殊,null在进行比较的时候,应该是会被当成一个对象和原生类型的比较。
对象类型一般返回false
当对象类型和基本类型(==)比较时,对象类型会通过
toPrimitive()
函数转化后比较,例如var info = { name: 'zs', age: 20 } console.log(123 == info) // false
1
2
3
4
5但是如果重写对象中的
toPrimitive
函数,让其结果为123,那么==比较的结果就是truevar info = { name:'zs', age: 20, [Symbol.toPrimitive](){ return 123 } } console.log(123 == info) // true
1
2
3
4
5
6
7
8
# 代码块
代码块是多行执行代码的集合,通过一个{}
放到一起。
# if分支语句
if(...)语句会计算圆括号内的表达式,并将计算结果转换为布尔型,转换规则和Boolean函数的规则一致;数字0、空字符串、""、null、undefined和NaN都会被转换成false,因为它们被称为假值;其他值被转换为true,它们被称为真值。
# 逻辑运算符
逻辑运算符主要有三个:||
(或),&&
(与),!
(非)。这些运算符可以组合到一起获取到最终的结果
# 逻辑或的本质
||
表示"或"运算,"或"运算从左到右依次计算操作,处理每一个操作数时,都将其转换为布尔值,如果处理结果是true,就停止计算,返回这个操作数的初始值,如果所有的操作数都被计算过,则返回最后一个操作数。
注意:返回值是操作数的初始形式,不会转换为Boolean类型
# 逻辑与的本质
&&
表示“与”运算,从左到右一次计算操作数,在处理每一个操作数时,都将其转换为布尔值,如果结果是false,就停止计算,并返回这个操作数的初始值,如果所有的操作数据都被计算过,则返回最后一个操作数。即与运算返回第一个假值,如果没有假值就返回最后一个值。
# 非运算
逻辑非运算符接受一个参数,分为两步计算:
- 将操作数转化为布尔类型,true/false
- 返回相反的值
两个非运算符(!!)有时候用来将某个值转化为布尔类型。第一个非运算将该值转换为布尔类型并取反,第二个非运算再次取反,最后就得到了任意布尔值的转化