JS 数据的运算

137 阅读4分钟

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 :对给定的表达式进行求值,然后返回 undefined
  • typeof :返回操作数的类型
  • delete :删除对象的一个属性
  • in :用于检查一个对象(极其原型链中)是否包含某个特定的属性
  • instanceof :用于检查一个对象是否是另一个对象的实例
  • super :用于访问对象字面量或类的原型上的属性,或调用父类的构造函数
  • await :用于等待一个 Promise 兑现并获取它兑现之后的值
  • new :创建对象的实例
  • new.target :检测函数或构造方法是否是通过new运算符被调用的
  • yield :用于暂停和恢复生成器函数
  • yield* :用于委托给另一个generator 或可迭代对象
  • import.meta :给 JS 模块暴露特定上下文的元数据属性的对象
  • import() :动态导入JS模块

函数

函数是对变量的一系列的运算,最后得到结果的过程。不同编程语言的函数细节会有差异,JS中的函数概念也有其特殊之处,针对这部分笔者会单独写篇文章来介绍(《JS 函数及其概念发展史》)。

总结

数据的运算属于比较简单易懂的知识块,但也需要我们经常温故的。

JS发展了这么多年,已经有很多运算符属于JS特有的了,有些运算符的使用方便了运算,有些运算符的使用会让我们的代码更优雅,有些运算符带来了特殊的功能

只有在理解它们的基础上才能更好的运用。