運(yùn)算符
算術(shù)運(yùn)算符
加法運(yùn)算符(Addition):x + y
減法運(yùn)算符(Subtraction): x - y
乘法運(yùn)算符(Multiplication): x * y
除法運(yùn)算符(Division):x / y
余數(shù)運(yùn)算符(Remainder):x % y
自增運(yùn)算符(Increment):++x 或者 x++
自減運(yùn)算符(Decrement):--x 或者 x--
求負(fù)運(yùn)算符(Negate):-x
數(shù)值運(yùn)算符(Convert to number): +x
自增運(yùn)算符 ++X 和 X++ 這兩種方式在不賦值的情況下運(yùn)算結(jié)果是一樣的。
在賦值的的情況下
1. Y = ++X X先自增 然后再賦值給Y
比如X 的值是4,這時(shí)候經(jīng)過(guò)運(yùn)算之后,X=5,Y=5
2. Y = X ++ X先賦值 然后再自己自增 X=5,Y=4
加法運(yùn)算符 +
在兩個(gè)操作數(shù)都是數(shù)字的時(shí)候,會(huì)做加法運(yùn)算
兩個(gè)參數(shù)都是字符串或在有一個(gè)參數(shù)是字符串的情況下會(huì)把另外一個(gè)參數(shù)轉(zhuǎn)換為字符串做字符串拼接
在參數(shù)有對(duì)象的情況下會(huì)調(diào)用其valueOf或toString
在只有一個(gè)字符串參數(shù)的時(shí)候會(huì)嘗試將其轉(zhuǎn)換為數(shù)字
在只有一個(gè)數(shù)字參數(shù)的時(shí)候返回其正數(shù)值
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4
賦值運(yùn)算符
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
比較運(yùn)算符
1.== 相等
2.===嚴(yán)格相等
3.!=不相等
4.!==嚴(yán)格不相等
5.<小于
6.<=小于或等于
7.>大于
8.>=大于或等于
布爾運(yùn)算符
! 取反運(yùn)算符
&& 且運(yùn)算符
|| 或運(yùn)算符
condition? true case : false case三元條件運(yùn)算符
位運(yùn)算
或運(yùn)算(or):符號(hào)為|,表示兩個(gè)二進(jìn)制位中有一個(gè)為1,則結(jié)果為1,否則為0。
與運(yùn)算(and):符號(hào)為&,表示兩個(gè)二進(jìn)制位都為1,則結(jié)果為1,否則為0。
否運(yùn)算(not):符號(hào)為~,表示將一個(gè)二進(jìn)制位變成相反值。
異或運(yùn)算(xor):符號(hào)為?,表示兩個(gè)二進(jìn)制位中有且僅有一個(gè)為1時(shí),結(jié)果為1,否則為0。
左移運(yùn)算(left shift):符號(hào)為<<
右移運(yùn)算(right shift):符號(hào)為>>
帶符號(hào)位的右移運(yùn)算(zero filled right shift):符號(hào)為>>>
void
void運(yùn)算符的作用是執(zhí)行一個(gè)表達(dá)式,然后返回undefined。
typeof
typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類(lèi)型,可能有以下結(jié)果:
數(shù)值、字符串、布爾值分別返回number、string、boolean
function 、undefined 分別返回 function undefined
typeof 123; // "number"
typeof "123"; // "string"
typeof false; // "boolean"
function f(){}
typeof f; // "function"
typeof undefined; // "undefined"
其他的返回都是object
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
相等
我們知道可以使用==或===判斷兩個(gè)值的相等性,其中區(qū)別相信大家清楚,===是嚴(yán)格意義的相等,只需注意NaN和NaN不等就行了。而使用==的時(shí)候,javascript會(huì)幫我們做類(lèi)型轉(zhuǎn)換,造成一些匪夷所思的結(jié)果,那么使用==的時(shí)候會(huì)在哪些情況下做類(lèi)型轉(zhuǎn)換,又會(huì)換成什么樣子?
如果兩個(gè)值類(lèi)型相同,則執(zhí)行嚴(yán)格相等的運(yùn)算
如果兩個(gè)值的類(lèi)型不同
如果一個(gè)是null,一個(gè)是undefined,那么相等
如果一個(gè)是數(shù)字,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字,然后比較
如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
如果一個(gè)值是對(duì)象,一個(gè)是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
其它就不相等了
null==undefined;
NaN==NaN
"1"==true