一、js表達式
定義:表達式是指能計算出值得任何可用程序單元。 ——wiki
表達式是js一種短語,可使js解釋器用來產生一個值。 ——js《權威指南》
1.原始表達式。
常量/直接量: 3.14/ "test" 等
關鍵字: null,this,true,false 等
變量: i,k,j 等
復合表達式:原始表達式和原始表達式之間用運算符連接可以組成一個復合表達式。
例如: 10 * 20 這就是一個復合表達式
2.(數組、對象的)初始化表達式。
例如:
1 2 3 4 5 6 7[1,2] 等價於
new
Array(1,2);
[1,,,2] 等價於
new
Array(1,undefined,undefined,2);
{x:1,y:2} 等價於
var
obj =
new
Object();
obj.x = 1;obj.y = 2;
3.函數表達式。
var fn = function(){};
或者:
(function(){ console.log("hello") })();
如果你不理解函數表達式後面還會有對應的介紹。
4.屬性訪問表達式。
var obj = {x:1}
我們可以通過 obj.x 或者 obj["x"]來訪問它的屬性,這一類表達式就稱之為屬性訪問表達式。
5.調用表達式。
func(); 來調用一個函數,這樣的表達式就稱之為調用表達式。
6.對象創建表達式。
例如:
new Func(1,2);我們可以傳參,如果沒有參數我們也可以new Object;創建一個空的對象這樣也是合法的。
二、js運算符(一般用於表達式之間進行一些運算)。
1.按照運算符的操作數的數量:
一元運算符: +num
二元運算符: a + b
三元運算符: c?a:b
2.按照功能區分:
賦值:x += 1 (或者-=,=等)
比較:a == b
算數:a - b
位: a | b
邏輯: exp1 && exp2 (或與非)
字符串:“a” + “b”
特殊: delete obj.x
下面我們對特殊運算符展開來講:
條件運算符:var c = true?1:2 //c=1
逗號運算符:var val = (1,2,3) // val = 3 從左到右依次計算,取最後的
delete運算符:就是刪除對象上的屬性。
--例如:var obj = {x:1}
obj.x //1
delete obj.x
obj.x //undefined
從IE9開始,我們可以給對象設置configurable標簽,當configurable:true時屬性才可以被delete掉
例:var obj = {}
Object.defineProperty(obj, 'x', {
configurable:false,
value:1
});
delete obj.x
obj.x //1
3. in 運算符。
例:window.x = 1;那我們想知道window到底有沒有x呢,我們就可以用 in
”x“ in window; // true
4. instanceof 和 typeof 我們在上一章詳細的介紹過,如果忘記了可以去看一下。
5. new運算符
比如說我們創建一個函數構造器:function Foo(){}
Foo.prototype.x = 1;
我們可以用new運算符就可以創建一個對象obj
var obj = new Foo();
這樣obj.x; //1 我們就可以從它的構造器上的prototype屬性上拿到 1
我們可以通過 obj.hasOwnProperty("x"); //false 來判斷這個屬性到底是對象上的還是對象的原型上的
obj._proto_拿到它的原型,obj._proto_.hasOwnProperty("x"); //true 說明是原型上的
6.this 運算符。
this; //window(浏覽器)
var obj = {
func:function(){
return this;
}
}
obj.func(); // obj
this運算符也是比較特殊的這個我們後面會詳細講。
7.void運算符。
void 0 //undefined
void (0) //undefined
void無論後面的操作數是多少,返回的都是undefined。
8.運算符的優先級,也是建議大家去看一下,更有助於大家讀懂復雜的表達式。