表達式為 JavaScript 的短語可執(zhí)行并生成值。
1.7 // 字面量
"1.7"
var a = 1;
var b = '2';
var c = (1.7 + a) * '3' - b
+
-
*
/
%
)>
<
==
!=
>=
<=
===
!==
)!
&&
||
)&
|
^
~
<<
>>
)=
)?:
),
)new
delete
.
[]
instanceof
)全等運算符用于盤對左右兩邊的對象或值是否類型相同且值相等。
偽代碼拆解
function totalEqual(a, b) {
if (a 和 b 類型相同) {
if (a 和 b 是引用類型) {
if (a 和 b 是同一引用)
return true;
else
return false;
} else { // 值類型
if (a 和 b 值相等)
return true;
else
return false;
}
} else {
return false;
}
}
例子
var a = "123";
var b = "123";
var c = "4";
var aObj = new String("123");
var bObj = new String("123");
var cObj = aObj;
a === aObj // false
aObj === bObj // false
aObj === cObj // true
a === b // true
a === c // false
==
用于判斷操作符兩邊的對象或值是否相等。
偽代碼拆解
function equal(a, b) {
if (a 和 b 類型相同) {
return a === b;
} else { // 類型不同
return Number(a) === Number(b); // 優(yōu)先轉換數值類型
}
}
例子
"99" == 99; // true
new String("99") == 99; // true
true == 1; // true
false == 0; // true
'\n\n\n' == // true
null == undefined
結果為真 true
null
/undefined
參與的 ==
運算是不進行隱式轉換。0 == null; // false
null == false; // false
"undefined" == undefined; // false
!x
用于表達 x 表達式的運行結果轉換成布爾值(Boolean)之后取反的結果。!!x
則表示取 x 表達式的運行結果的布爾值。
var obj = {};
var a = !obj // false;
var a = !!obj // true;
x && y
如果 x 表達式的運行交過轉換成 Boolean 值為 false 則不運行表達式 y 而直接返回 x 表達式的運行結果。相反,如果 x 表達式的運行交過轉換成 Boolean 值為 true 則運行表達式 y 并返回 y 表達式的運行結果。
偽代碼拆解
var ret = null;
if (!!(ret = x)) {
return y;
} else {
return ret;
}
例子
var a = 0 && (function(){return 1 + 1;})(); // 0
var b = 1 && (function(){return 1 + 1;})(); // 2
x || y
如果 x 表達式的運行結果轉換為 Boolean 值為 true,則不運行 表達式 y 而直接返回表達式 x 的運算結果。(與 &&
方式相反)
偽代碼拆解
var ret = null;
if (!!(ret = x)) {
return ret;
} else {
return y;
}
例子
var a = 0 || (function(){return 1 + 1;})(); // 2
var b = 1 || (function(){return 1 + 1;})(); // 1
+
-
*
/
高于 &&
*
/
高于 +
-
&&
高于 ?:
()
內優(yōu)先級高于之外NOTE:和數學上的算術優(yōu)先級類似,同級從左到右計算。如有疑問加上 ()
既可解決優(yōu)先級問題。
Precedence | Operator type | Associativity | Individual operators |
---|---|---|---|
19 | Grouping | n/a | ( … ) |
18 | Member Access | left-to-right | … . … |
Computed Member Access | left-to-right | … [ … ] |
|
new (with argument list) | n/a | new … ( … ) |
|
17 | Function Call | left-to-right | … (?…?) |
new?(without argument list) | right-to-left | new … |
|
16 | Postfix Increment | n/a | … ++ |
Postfix Decrement | n/a | … -- |
|
15 | Logical NOT | right-to-left | ! … |
Bitwise NOT | right-to-left | ~ … |
|
Unary Plus | right-to-left | + … |
|
Unary Negation | right-to-left | - … |
|
Prefix Increment | right-to-left | ++ … |
|
Prefix Decrement | right-to-left | -- … |
|
typeof | right-to-left | typeof … |
|
void | right-to-left | void … |
|
delete | right-to-left | delete … |
|
14 | Multiplication | left-to-right | … *?… |
Division | left-to-right | … /?… |
|
Remainder | left-to-right | … %?… |
|
13 | Addition | left-to-right | … +?… |
Subtraction | left-to-right | … -?… |
|
12 | Bitwise Left Shift | left-to-right | … <<?… |
Bitwise Right Shift | left-to-right | … >>?… |
|
Bitwise Unsigned Right Shift | left-to-right | … >>>?… |
|
11 | Less Than | left-to-right | … <?… |
Less Than Or Equal | left-to-right | … <=?… |
|
Greater Than | left-to-right | … >?… |
|
Greater Than Or Equal | left-to-right | … >=?… |
|
in | left-to-right | … in?… |
|
instanceof | left-to-right | … instanceof?… |
|
10 | Equality | left-to-right | … ==?… |
Inequality | left-to-right | … !=?… |
|
Strict Equality | left-to-right | … ===?… |
|
Strict Inequality | left-to-right | … !==?… |
|
9 | Bitwise AND | left-to-right | … &?… |
8 | Bitwise XOR | left-to-right | … ^?… |
7 | Bitwise OR | left-to-right | … |?… |
6 | Logical AND | left-to-right | … &&?… |
5 | Logical OR | left-to-right | … ||?… |
4 | Conditional | right-to-left | … ? … : … |
3 | Assignment | right-to-left | … =?… |
… +=?… |
|||
… -=?… |
|||
… *=?… |
|||
… /=?… |
|||
… %=?… |
|||
… <<=?… |
|||
… >>=?… |
|||
… >>>=?… |
|||
… &=?… |
|||
… ^=?… |
|||
… |=?… |
|||
2 | yield | right-to-left | yield?… |
1 | Spread | n/a |
... ?… |
0 | Comma / Sequence | left-to-right | … ,?… |