运算符

XiLaiTL大约 7 分钟

运算符

JavaScript的运算符与C语言几乎一样,但是增加了几个特殊的运算符。

而逻辑运算符、比较运算符运算结果不是C语言的0和1,而是true和false。

  • 算术运算符
  • 赋值运算符
运算符描述运算符描述例子即
+加法=赋值x = y
-减法+=x += yx = x + y
*乘法-=x -= yx = x - y
/除法*=x *= yx = x * y
%取模(余数)/=x /= yx = x / y
++递加%=x %= yx = x % y
--递减
  • 位运算符
运算符描述例子等同于结果十进制
&5 & 10101 & 000100011
|5 | 10101 | 000101015
~~ 5~0101101010
^异或5 ^ 10101 ^ 000101004
<<零填充左位移5 << 10101 << 1101010
>>有符号右位移5 >> 10101 >> 100102
>>>零填充右位移5 >>> 10101 >>> 100102

位运算符处理 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 == 8false
x == 5true
x == "5"true
===值相等并且类型相等x === 5true
x === "5"false
!=不相等x != 8true
!==值不相等或类型不相等x !== 5false
x !== "5"true
x !== 8true

不同类型的比较

案例案例
2 < 12truetrue==1true
2 < "12"truefalse==0false
2 < "John"falsetrue==2false
2 > "John"falsetrue=="1"true
2 == "John"falsetrue=="true"false
2=="2"truetrue==eval("true")true
2==="2"false
"2" < "12"falsenull === undefinedfalse
"2" > "12"true//字典序比较null == undefinedtrue
"2" == "12"false

不同类型的运算

当数值和字符串相加时,JavaScript 将把数值视作字符串。

JavaScript 从左向右计算表达式。不同的次序会产生不同的结果:

var x = 911 + 7 + "Porsche";//918Porsche
var x = "Porsche" + 911 + 7;//Porsche9117

在第一个例子中,JavaScript 把 911 和 7 视作数值,直到遇见 "Porsche"。

在第二个例子中,由于第一个操作数是字符串,因此所有操作数都被视为字符串。

运算符优先级

优先级运算符类型结合性运算符
21分组open in new windown/a(不相关)( … )
20成员访问open in new window从左到右… . …
需计算的成员访问open in new window从左到右… [ … ]
newopen in new window(带参数列表)n/anew … ( … )
函数调用open in new window从左到右… ( … )
可选链(Optional chaining)open in new window从左到右?.
19newopen in new window(无参数列表)从右到左new …
18后置递增open in new windown/a… ++
后置递减open in new windown/a… --
17逻辑非 (!)open in new window从右到左! …
按位非 (~)open in new window从右到左~ …
一元加法 (+)open in new window从右到左+ …
一元减法 (-)open in new window从右到左- …
前置递增open in new window从右到左++ …
前置递减open in new window从右到左-- …
typeofopen in new window从右到左typeof …
voidopen in new window从右到左void …
deleteopen in new window从右到左delete …
awaitopen in new window从右到左await …
16幂 (**)open in new window从右到左… ** …
15乘法 (*)open in new window从左到右… * …
15乘法 (*)open in new window从左到右… * …
除法 (/)open in new window从左到右… / …
取余 (%)open in new window从左到右… % …
14加法 (+)open in new window从左到右… + …
减法 (-)open in new window从左到右… - …
13按位左移 (<<)open in new window从左到右… << …
按位右移 (>>)open in new window从左到右… >> …
无符号右移 (>>>)open in new window从左到右… >>> …
12小于 (<)open in new window从左到右… < …
小于等于 (<=)open in new window从左到右… <= …
大于 (>)open in new window从左到右… > …
大于等于 (>=)open in new window从左到右… >= …
inopen in new window从左到右`… in …
instanceofopen in new window从左到右… instanceof …
11相等 (==)open in new window从左到右… == …
不相等 (!=)open in new window从左到右… != …
一致/严格相等 (===)open in new window从左到右… === …
不一致/严格不相等 (!==)open in new window从左到右… !== …
10按位与 (&)open in new window从左到右… & …
9按位异或 (^)open in new window从左到右… ^ …
8按位或 (|)open in new window从左到右`… | …
7逻辑与 (&&)open in new window从左到右… && …
6逻辑或 (||)open in new window从左到右`…
5空值合并 (??)open in new window从左到右… ?? …
4条件(三元)运算符open in new window从右到左… ? … : …
3赋值open in new window从右到左… = …
从左到右… += …
从左到右… -= …

数学库

在JavaScript中,数学库是一个对象,而不像C语言那样是一个函数库。

数学库提供了丰富的属性和方法。但是,数学库并不是一个类,而是可以直接使用而不需要实例化的对象。

Math 对象属性

属性描述
Eopen in new window返回算术常量 e,即自然对数的底数(约等于2.718)。
LN2open in new window返回 2 的自然对数(约等于0.693)。
LN10open in new window返回 10 的自然对数(约等于2.302)。
LOG2Eopen in new window返回以 2 为底的 e 的对数(约等于 1.414)。
LOG10Eopen in new window返回以 10 为底的 e 的对数(约等于0.434)。
PIopen in new window返回圆周率(约等于3.14159)。
SQRT1_2open in new window返回返回 2 的平方根的倒数(约等于 0.707)。
SQRT2open in new window返回 2 的平方根(约等于 1.414)。

Math 对象方法

方法描述
abs(x)open in new window返回数的绝对值。
acos(x)open in new window返回数的反余弦值。
asin(x)open in new window返回数的反正弦值。
atan(x)open in new window以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x)open in new window返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x)open in new window对数进行上舍入。
cos(x)open in new window返回数的余弦。
exp(x)open in new window返回 e 的指数。
floor(x)open in new window对数进行下舍入。
log(x)open in new window返回数的自然对数(底为e)。
max(x,y)open in new window返回 x 和 y 中的最高值。
min(x,y)open in new window返回 x 和 y 中的最低值。
pow(x,y)open in new window返回 x 的 y 次幂。
random()open in new window返回 0 ~ 1 之间的随机数。
round(x)open in new window把数四舍五入为最接近的整数。
sin(x)open in new window返回数的正弦。//角度制
sqrt(x)open in new window返回数的平方根。
tan(x)open in new window返回角的正切。
toSource()open in new window返回该对象的源代码。
valueOf()open in new window返回 Math 对象的原始值。

用法举例

var pi_value=Math.PI;
var sqrt_value=Math.sqrt(15);

参考资料

  • w3school
  • MCN
上次编辑于:
贡献者: XiLaiTL