賦值運算符
| 名字 | 操作符 | 含義 |
|---|---|---|
| 賦值 | x=y | 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 |
| 左移位賦值 | 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 |
| 按位或賦值 | x(或)=y | x=x(或)y |
左移位舉例
var bar = 5; // (00000000000000000000000000000101)
bar <<= 2; // 20 (00000000000000000000000000010100)
無符號右移與有符號右移
1.有符號右移>>(若正數(shù),高位補0,負數(shù),高位補1)
正數(shù):例如4>>2
首先寫出4的二進制數(shù),因為是正數(shù)所以最高位為0,也就是第一個
0000 0000 0000 0000 0000 0000 0000 0100
右移兩位得到(高位補0)
000000 0000 0000 0000 0000 0000 0000 01
結(jié)果為:1,右移n位也就是4/(2^n)
負數(shù):例如-4>>2(高位補1)
首先寫出-4的二進制數(shù),因為是負數(shù)所以最高位為1
1000 0000 0000 0000 0000 0000 0000 0100
然后寫出-4補碼:保證符號位不變,其余位置取反加1(從右往左遇到第一個1,然后剩下的全部取反就是了)
1111 1111 1111 1111 1111 1111 1111 1100(補碼)
右移2位: 在高位補1
1111 1111 1111 1111 1111 1111 1111 1111
根據(jù)補碼寫出原碼才是我們所求的結(jié)果, 保留符號位,然后按位取反再加上1
100000 0000 0000 0000 0000 0000 0000 00(取反后的結(jié)果)
100000 0000 0000 0000 0000 0000 0000 01(再加1)
結(jié)果為:-1
2:無符號右移>>>(不論正負,高位均補0)
正數(shù):例如4>>>2
與4>>2的運算相同,結(jié)果也為1
負數(shù):例如-4>>>2
首先寫出-4的二進制數(shù),因為是負數(shù)所以最高位為1
1000 0000 0000 0000 0000 0000 0000 0100
然后寫出-4補碼:保證符號位不變,其余位置取反加1(從右往左遇到第一個1,然后剩下的全部取反就是了)
1111 1111 1111 1111 1111 1111 1111 1100(補碼)
右移2位: 在高位補0
0011 1111 1111 1111 1111 1111 1111 1111
結(jié)果為:1073741823
按位異或舉例
異或--同為0,異為1
var bar = 5;
bar ^= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
比較運算符
| 運算符 | 描述 |
|---|---|
等于 (==) |
如果兩邊操作數(shù)相等時返回true。 |
不等于(!=) |
如果兩邊操作數(shù)不相等時返回true |
全等 (===) |
兩邊操作數(shù)相等且類型相同時返回true。 |
不全等 (!==) |
兩邊操作數(shù)不相等或類型不同時返回true。 |
大于 (>) |
左邊的操作數(shù)大于右邊的操作數(shù)返回true |
大于等于 (>=) |
左邊的操作數(shù)大于或等于右邊的操作數(shù)返回true |
小于 (<) |
左邊的操作數(shù)小于右邊的操作數(shù)返回true |
小于等于 (<=) |
左邊的操作數(shù)小于或等于右邊的操作數(shù)返回true |
算術(shù)運算符
| 運算符 | 描述 | 舉例 |
|---|---|---|
| 求余(%) | 二元運算符. 返回相除之后的余數(shù) | 12 % 5 返回 2。 |
| 自增(++) | 一元運算符. 將操作數(shù)的值加一. 如果放在操作數(shù)前面 (++x), 則返回加一后的值; 如果放在操作數(shù)后面 (x++), 則返回操作數(shù)原值,然后再將操作數(shù)加一 | var x=3; console.log(++x); //4 var y=3; console.log(y++); //3 |
| 自減(--) | 一元運算符. 將操作數(shù)的值減一. 前后綴兩種用法的返回值類似自增運算符 | var x=3; console.log(--x); //輸入2,x=2 var y=3; console.log(y--);//輸出3,x=2; |
| 一元負值符(-) | 一元運算符,返回操作數(shù)的負值. | var x=3; console.log(-x); //輸入-3 |
| 一元正值符(+) | 一元運算符, 如果操作數(shù)在之前不是number,試圖將其轉(zhuǎn)換為number | console.log( +'3' ); // 3 console.log( '3' ); // '3' console.log(+true); // 1 |
| 指數(shù)運算符(**) | 計算 base(底數(shù)) 的 exponent(指數(shù))次方, 表示為base^exponent | 2 ** 3 returns 8.10 ** -1 returns 0.1. |
位運算符
位運算符將它的操作數(shù)視為32位元的二進制串(0和1組成)而非十進制八進制或十六進制數(shù)。例如:十進制數(shù)字9用二進制表示為1001,位運算符就是在這個二進制表示上執(zhí)行運算,但是返回結(jié)果是標準的JavaScript數(shù)值。
| Operator | Usage | Description |
|---|---|---|
| 按位與 | a & b |
在a,b的位表示中,每一個對應(yīng)的位都為1則返回1, 否則返回0 |
| 按位或 | a (或)b |
在a,b的位表示中,每一個對應(yīng)的位,只要有一個為1則返回1, 否則返回0. |
| 按位異或 | a ^ b |
在a,b的位表示中,每一個對應(yīng)的位,兩個不相同則返回1,相同則返回0. |
| 按位非 | ~ a |
反轉(zhuǎn)被操作數(shù)的位。 |
| 左移 | a << b |
將a的二進制串向左移動b位,右邊移入0. |
| 算術(shù)右移 | a >> b |
把a的二進制表示向右移動b位,丟棄被移出的所有位.(譯注:算術(shù)右移左邊空出的位是根據(jù)最高位是0和1來進行填充的) |
| 無符號右移(左邊空出位用0填充) | a >>> b |
把a的二進制表示向右移動b位,丟棄被移出的所有位,并把左邊空出的位都填充為0 |
位運算符范例
| 表達式 | 結(jié)果 | 二進制描述 |
|---|---|---|
| 15 & 9 | 9 | 1111 & 1001 = 1001 |
| 15 (或)9 | 15 | 1111 (或) 1001 = 1111 |
| 15 ^ 9 | 6 | 1111 ^ 1001 = 0110 |
| ~15 | -16 | ~00000000...00001111 = 11111111...11110000 |
| ~9 | -10 | ~00000000...00001001 = 11111111...11110110 |
注意位運算符“非”將所有的32位取反,而值的最高位(最左邊的一位)為1則表示負數(shù)
邏輯運算符
| 運算符 | 范例 | 描述 |
|---|---|---|
邏輯與(&&) |
expr1 && expr2 |
(邏輯與) 如果expr1能被轉(zhuǎn)換為false,那么返回expr1;否則,返回expr2。因此,&&用于布爾值時,當操作數(shù)都為true時返回true;否則返回false. |
| 邏輯或 | expr1 (邏輯或)expr2 |
(邏輯或) 如果expr1能被轉(zhuǎn)換為true,那么返回expr1;否則,返回expr2。因此,用于布爾值時,當任何一個操作數(shù)為true則返回true;如果操作數(shù)都是false則返回false。 |
邏輯非(!)
|
!expr |
(邏輯非) 如果操作數(shù)能夠轉(zhuǎn)換為true則返回false;否則返回true。 |
字符串運算符
它可以在字符串值中使用,連接操作符(+)連接兩個字符串值相連接,返回另一個字符串,它是兩個操作數(shù)串的結(jié)合。
例如,
console.log("my " + "string"); // console logs the string "my string".
簡寫操作符 += 也可以用來拼接字符串
例如:
var myString = "alpha";
myString += "bet"; // 返回 "alphabet"
條件(三元)運算符
條件運算符是JavaScript中唯一需要三個操作數(shù)的運算符。運算的結(jié)果根據(jù)給定條件在兩個值中取其一。語法為:
條件 ? 值1 : 值2
如果條件為真,則結(jié)果取值1。否則為值2。
例如,
var status = (age >= 18) ? "adult" : "minor";
當 age 大于等于18的時候,將“adult”賦值給status;否則將“minor”賦值給 status
逗號操作符
逗號操作符(,)對兩個操作數(shù)進行求值并返回最終操作數(shù)的值。它常常用在 for 循環(huán)中,在每次循環(huán)時對多個變量進行更新。
for (var i = 0, j = 9; i <= j; i++, j--)
console.log('a[' + i + '][' + j + ']= ' + a[i][j]);
一元操作符
一元操作符僅對應(yīng)一個操作數(shù)。
- delete
- typeof
- void 表明一個運算沒有返回值
關(guān)系操作符
- in
如果所指定的屬性確實存在于所指定的對象中,則會返回true - instanceof
如果所判別的對象確實是所指定的類型,則返回true。
運算符優(yōu)先級
1.算數(shù)運算符 +- * / %
2.關(guān)系運算符 > < >= <= == === != !==
3.邏輯運算符 && || !
4.賦值運算符 =
邏輯運算符優(yōu)先級:先非后與再或