js 中的操作符
typeof 操作符
是一个操作符而不是函数,圆括号可以使用,但不是必需的
var num |
算数操作符
+
、-
、*
、/
、%
对于加法 转换方向: 布尔值 -> 数值 -> 字符串, 数组/对象 -> 字符串
除加法以外 转换方向:字符串 -> 数值,布尔值 -> 数值, 数组 -> 数值
var num = 5 + 6 // 11 |
赋值操作符
赋值运算符左边不能是常量或表达式
var age = 10 |
关系操作符
>
、<
、>=
、<=
==
相等 、!=
不相等 、===
全等 、!==
不全等
in
instanceof
>
、<
、>=
、<=
、==
、!=
在比较前先执行类型转换
- 如果有一个操作数是布尔值,则在比较相等性前先将其转换为数值 -> false 转换为 0,true 转换为 1
- 如果一个操作数是字符串,另一个操作数是数值,则在比较相等性前将字符串转换为数值
- 如果两个值都是字符串,则按照字符串的字符编码进行逐位比较
- 如果一个数是对象,另一个不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则比较
- 如果两个操作数都是对象,则比较它们是否指向同一个对象
- null 和 undefined 是相等的
- 在比较相等性之前,不能将 null 和 undefined 转换为其他任何值
- 在比较大小之前,null,undefined 会被 Number()强制转换成数字类型 Number(null) -> 0, Number(undefined) -> NaN
- 如果有一个操作符是 NaN,则相等操作符返回 false,不相等操作符返回 true;即使两个操作数都是 NaN,也一样
===
全等、!==
不全等
两个操作数在未经转换的情况下相等返回 true,不相等返回 false
0 == false // true |
in
判断对象是否能够访问到该属性
instanceof
判断一个对象是否是另一个对象的实例
逻辑操作符
!
非、&&
与、||
或
!
对 Boolean 值取反
var flag = true |
&&
如果第一个值转换成 boolean 值之后为 true, 则输出第二个值;如果第一个值转换成 boolean 值之后为 false,则输出第一个值,且第二个值不在执行。(取第一个为 false 的值,如果都为 true ,则输出最后一个值。)
var result = true && 3 // 3 |
&&
使用场景
function animate(fn) { |
||
如果第一个值转换成 boolean 值之后为 true, 则输出第一个值,且第二个值不在执行;如果第一个值转换成 boolean 值之后为 false,则输出第二个值,以此类推,(取第一个为 true 的值,如果都为 false ,则输出最后一个值。)
var result = true || 3 // true |
||
使用场景
// 1.兼容性问题: |
操作符的优先级
从高到低如下:
() 优先级最高
一元运算符 ++ – !
算数运算符 先 * / % 后 + -
关系运算符 > >= < <=
相等运算符 == != === !==
逻辑运算符 先 && 后 ||
赋值运算符 =
空值合并操作符 ??
注意与或操作符区别
var a = b ?? c |
可选链操作符 ?.
在引用为空(nullish) (null
或者 undefined
) 的情况下不会引起错误,会短路返回值,返回 undefined
// 访问属性、调用方法 |