JS中数据的运算,是依托于运算符和函数的。
运算符的种类有算术运算符、位运算符、逻辑运算符、赋值运算符、比较运算符、属性访问运算符、拓展运算符、逗号运算符、圆括号运算符、解构运算符,以及用关键字作为运算符。
本文非常全面的收集了JS数据的运算符和它们的用法。
算术运算符
++:自加--:自减+:求和-:相减*:求积/:求商%:取余**:求幂
位运算符
&:按位与|:按位或~:按位非^:按位异或,即两个操作数有且仅有一个对应的二进制位为 1 时,该位的结果值才为 1<<:左移位>>:右移位>>>:无符号右移位
逻辑运算符
&&:逻辑与||:逻辑或!:逻辑非??:空值合并,即当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数? ::条件运算,即如果条件为真值,则执行冒号前的表达式;若条件为假值,则执行最后的表达式
赋值运算符
=:简单变量赋值+=:加法变量赋值-=:减法变量赋值*=:乘法变量赋值/=:除法变量赋值%=:取余变量赋值**=:求幂变量赋值&=:按位与变量赋值|=:按位或变量赋值^=:按位异或变量赋值<<=:左移位变量赋值>>=:右移位变量赋值>>>=:无符号右移位变量赋值&&=:逻辑与变量赋值||=:逻辑或变量赋值??=:空值合并变量赋值,即 x ??= y 仅在 x 是空值(null 或 undefined)时对其赋值
比较运算符
<:小于>:大于<=:小于等于>=:大于等于==:相等===:严格相等!=:不相等!==:严格不相等
属性访问运算符
.:访问对象属性(静态)[key]:访问对象的属性(动态)?.:访问位于对象链深处的属性的值,而不必明确验证链中的每个引用是否有效,功能类似于 . 运算符,不同之处在于,在引用为空 (null 或 undefined) 的情况下不会引起错误
拓展运算符
...:可以将一个数组、字符串、对象或类数组对象展开成单个元素,或将多个元素组成一个数组,只能用于可迭代对象
逗号运算符
,:对它的每个操作数从左到右求值,并返回最后一个操作数的值,通常用于为 for 循环提供多个参数
var x = 0;
var y = (x++, 10);
x // 1
y // 10
圆括号运算符
():用于控制表达式中的运算优先级
解构运算符
一种方便的语法,可以将数组或对象中的值赋给变量,可以在变量名前加上一对花括号({})或方括号([]),然后将要解构的数组或对象赋给它
关键字运算符
void:对给定的表达式进行求值,然后返回 undefinedtypeof:返回操作数的类型delete:删除对象的一个属性in:用于检查一个对象(极其原型链中)是否包含某个特定的属性instanceof:用于检查一个对象是否是另一个对象的实例super:用于访问对象字面量或类的原型上的属性,或调用父类的构造函数await:用于等待一个 Promise 兑现并获取它兑现之后的值new:创建对象的实例new.target:检测函数或构造方法是否是通过new运算符被调用的yield:用于暂停和恢复生成器函数yield*:用于委托给另一个generator 或可迭代对象import.meta:给 JS 模块暴露特定上下文的元数据属性的对象import():动态导入JS模块
函数
函数是对变量的一系列的运算,最后得到结果的过程。不同编程语言的函数细节会有差异,JS中的函数概念也有其特殊之处,针对这部分笔者会单独写篇文章来介绍(《JS 函数及其概念发展史》)。
总结
数据的运算属于比较简单易懂的知识块,但也需要我们经常温故的。
JS发展了这么多年,已经有很多运算符属于JS特有的了,有些运算符的使用方便了运算,有些运算符的使用会让我们的代码更优雅,有些运算符带来了特殊的功能。
只有在理解它们的基础上才能更好的运用。