运算符
大约 7 分钟
运算符
JavaScript的运算符与C语言几乎一样,但是增加了几个特殊的运算符。
而逻辑运算符、比较运算符运算结果不是C语言的0和1,而是true和false。
- 算术运算符
- 赋值运算符
运算符 | 描述 | 运算符 | 描述 | 例子即 |
---|---|---|---|---|
+ | 加法 | = | 赋值 | x = y |
- | 减法 | += | x += y | x = x + y |
* | 乘法 | -= | x -= y | x = x - y |
/ | 除法 | *= | x *= y | x = x * y |
% | 取模(余数) | /= | x /= y | x = x / y |
++ | 递加 | %= | x %= y | x = x % y |
-- | 递减 |
- 位运算符
运算符 | 描述 | 例子 | 等同于 | 结果 | 十进制 |
---|---|---|---|---|---|
& | 与 | 5 & 1 | 0101 & 0001 | 0001 | 1 |
| | 或 | 5 | 1 | 0101 | 0001 | 0101 | 5 |
~ | 非 | ~ 5 | ~0101 | 1010 | 10 |
^ | 异或 | 5 ^ 1 | 0101 ^ 0001 | 0100 | 4 |
<< | 零填充左位移 | 5 << 1 | 0101 << 1 | 1010 | 10 |
>> | 有符号右位移 | 5 >> 1 | 0101 >> 1 | 0010 | 2 |
>>> | 零填充右位移 | 5 >>> 1 | 0101 >>> 1 | 0010 | 2 |
位运算符处理 32 位数。该运算中的任何数值运算数都会被转换为 32 位的数。结果会被转换回 JavaScript 数。上例使用 4 位无符号的例子。但是 JavaScript 使用 32 位有符号数。
因此,在 JavaScript 中,~ 5 不会返回 10,而是返回 -6。
~00000000000000000000000000000101 将返回 11111111111111111111111111111010。
- 比较运算符
- 逻辑运算符
- 条件运算符
- 类型运算符
运算符 | 描述 | 运算符 | 描述 |
---|---|---|---|
== | 等于 | && | 逻辑与 |
=== | 等值等型 | || | 逻辑或 |
!= | 不相等 | ! | 逻辑非 |
!== | 不等值或不等型 | 运算符 | 描述 |
> | 大于 | ?: | 三元运算符 var a = (condition) ? valueT:valueF; |
< | 小于 | 运算符 | 描述 |
>= | 大于或等于 | typeof | 返回变量的类型。 |
<= | 小于或等于 | instanceof | 判断对象是否属于类。 |
in | 判断属性值是否属于对象 |
- 字符串运算符(级联运算符)
运算符 | 描述 | ||
---|---|---|---|
+ | 返回一个字符串,后字符串连接到前一个后面 | txt1 = "Bill"; txt2 = "Gates"; txt3 = txt1 + " " + txt2; | //txt3 //Bill Gates |
+= | 后字符串连接到前一个后面 | txt1 = "Hello "; txt1 += "Kitty!"; | //txt1 //Hello Kitty! |
判断条件型语句案例
x=5;
运算符 | 描述 | 比较 | 返回 |
---|---|---|---|
== | 等于 | x == 8 | false |
x == 5 | true | ||
x == "5" | true | ||
=== | 值相等并且类型相等 | x === 5 | true |
x === "5" | false | ||
!= | 不相等 | x != 8 | true |
!== | 值不相等或类型不相等 | x !== 5 | false |
x !== "5" | true | ||
x !== 8 | true |
不同类型的比较
案例 | 值 | 案例 | 值 |
---|---|---|---|
2 < 12 | true | true==1 | true |
2 < "12" | true | false==0 | false |
2 < "John" | false | true==2 | false |
2 > "John" | false | true=="1" | true |
2 == "John" | false | true=="true" | false |
2=="2" | true | true==eval("true") | true |
2==="2" | false | ||
"2" < "12" | false | null === undefined | false |
"2" > "12" | true//字典序比较 | null == undefined | true |
"2" == "12" | false |
不同类型的运算
当数值和字符串相加时,JavaScript 将把数值视作字符串。
JavaScript 从左向右计算表达式。不同的次序会产生不同的结果:
var x = 911 + 7 + "Porsche";//918Porsche
var x = "Porsche" + 911 + 7;//Porsche9117
在第一个例子中,JavaScript 把 911 和 7 视作数值,直到遇见 "Porsche"。
在第二个例子中,由于第一个操作数是字符串,因此所有操作数都被视为字符串。
运算符优先级
优先级 | 运算符类型 | 结合性 | 运算符 |
---|---|---|---|
21 | 分组 | n/a(不相关) | ( … ) |
20 | 成员访问 | 从左到右 | … . … |
需计算的成员访问 | 从左到右 | … [ … ] | |
new (带参数列表) | n/a | new … ( … ) | |
函数调用 | 从左到右 | … ( … ) | |
可选链(Optional chaining) | 从左到右 | ?. | |
19 | new (无参数列表) | 从右到左 | new … |
18 | 后置递增 | n/a | … ++ |
后置递减 | n/a | … -- | |
17 | 逻辑非 (!) | 从右到左 | ! … |
按位非 (~) | 从右到左 | ~ … | |
一元加法 (+) | 从右到左 | + … | |
一元减法 (-) | 从右到左 | - … | |
前置递增 | 从右到左 | ++ … | |
前置递减 | 从右到左 | -- … | |
typeof | 从右到左 | typeof … | |
void | 从右到左 | void … | |
delete | 从右到左 | delete … | |
await | 从右到左 | await … | |
16 | 幂 (**) | 从右到左 | … ** … |
15 | 乘法 (*) | 从左到右 | … * … |
15 | 乘法 (*) | 从左到右 | … * … |
除法 (/) | 从左到右 | … / … | |
取余 (%) | 从左到右 | … % … | |
14 | 加法 (+) | 从左到右 | … + … |
减法 (-) | 从左到右 | … - … | |
13 | 按位左移 (<<) | 从左到右 | … << … |
按位右移 (>>) | 从左到右 | … >> … | |
无符号右移 (>>>) | 从左到右 | … >>> … | |
12 | 小于 (<) | 从左到右 | … < … |
小于等于 (<=) | 从左到右 | … <= … | |
大于 (>) | 从左到右 | … > … | |
大于等于 (>=) | 从左到右 | … >= … | |
in | 从左到右 | `… in … | |
instanceof | 从左到右 | … instanceof … | |
11 | 相等 (==) | 从左到右 | … == … |
不相等 (!=) | 从左到右 | … != … | |
一致/严格相等 (===) | 从左到右 | … === … | |
不一致/严格不相等 (!==) | 从左到右 | … !== … | |
10 | 按位与 (&) | 从左到右 | … & … |
9 | 按位异或 (^) | 从左到右 | … ^ … |
8 | 按位或 (|) | 从左到右 | `… | … |
7 | 逻辑与 (&&) | 从左到右 | … && … |
6 | 逻辑或 (||) | 从左到右 | `… |
5 | 空值合并 (??) | 从左到右 | … ?? … |
4 | 条件(三元)运算符 | 从右到左 | … ? … : … |
3 | 赋值 | 从右到左 | … = … |
从左到右 | … += … | ||
从左到右 | … -= … |
数学库
在JavaScript中,数学库是一个对象,而不像C语言那样是一个函数库。
数学库提供了丰富的属性和方法。但是,数学库并不是一个类,而是可以直接使用而不需要实例化的对象。
Math 对象属性
属性 | 描述 |
---|---|
E | 返回算术常量 e,即自然对数的底数(约等于2.718)。 |
LN2 | 返回 2 的自然对数(约等于0.693)。 |
LN10 | 返回 10 的自然对数(约等于2.302)。 |
LOG2E | 返回以 2 为底的 e 的对数(约等于 1.414)。 |
LOG10E | 返回以 10 为底的 e 的对数(约等于0.434)。 |
PI | 返回圆周率(约等于3.14159)。 |
SQRT1_2 | 返回返回 2 的平方根的倒数(约等于 0.707)。 |
SQRT2 | 返回 2 的平方根(约等于 1.414)。 |
Math 对象方法
方法 | 描述 |
---|---|
abs(x) | 返回数的绝对值。 |
acos(x) | 返回数的反余弦值。 |
asin(x) | 返回数的反正弦值。 |
atan(x) | 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。 |
atan2(y,x) | 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。 |
ceil(x) | 对数进行上舍入。 |
cos(x) | 返回数的余弦。 |
exp(x) | 返回 e 的指数。 |
floor(x) | 对数进行下舍入。 |
log(x) | 返回数的自然对数(底为e)。 |
max(x,y) | 返回 x 和 y 中的最高值。 |
min(x,y) | 返回 x 和 y 中的最低值。 |
pow(x,y) | 返回 x 的 y 次幂。 |
random() | 返回 0 ~ 1 之间的随机数。 |
round(x) | 把数四舍五入为最接近的整数。 |
sin(x) | 返回数的正弦。//角度制 |
sqrt(x) | 返回数的平方根。 |
tan(x) | 返回角的正切。 |
toSource() | 返回该对象的源代码。 |
valueOf() | 返回 Math 对象的原始值。 |
用法举例
var pi_value=Math.PI;
var sqrt_value=Math.sqrt(15);
参考资料
- w3school
- MCN