表達式為 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)先轉(zhuǎn)換數(shù)值類型
}
}
例子
"99" == 99; // true
new String("99") == 99; // true
true == 1; // true
false == 0; // true
'\n\n\n' == // true
null == undefined 結(jié)果為真 truenull/undefined 參與的 == 運算是不進行隱式轉(zhuǎn)換。0 == null; // false
null == false; // false
"undefined" == undefined; // false
!x 用于表達 x 表達式的運行結(jié)果轉(zhuǎn)換成布爾值(Boolean)之后取反的結(jié)果。!!x 則表示取 x 表達式的運行結(jié)果的布爾值。
var obj = {};
var a = !obj // false;
var a = !!obj // true;
x && y 如果 x 表達式的運行交過轉(zhuǎn)換成 Boolean 值為 false 則不運行表達式 y 而直接返回 x 表達式的運行結(jié)果。相反,如果 x 表達式的運行交過轉(zhuǎn)換成 Boolean 值為 true 則運行表達式 y 并返回 y 表達式的運行結(jié)果。
偽代碼拆解
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 表達式的運行結(jié)果轉(zhuǎn)換為 Boolean 值為 true,則不運行 表達式 y 而直接返回表達式 x 的運算結(jié)果。(與 && 方式相反)
偽代碼拆解
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
+ - * / 高于 &&* / 高于 + -&& 高于 ?:() 內(nèi)優(yōu)先級高于之外NOTE:和數(shù)學上的算術(shù)優(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 | … ,?… |