. [] () | 提取屬性與調用函數 |
delete new typeof + - | 一元運算符 |
* / % | 乘法、除法、求餘 |
+ - | 加法/連結、減 |
>= <= > < | 不等式運算符 |
=== !== | 等式運算符 |
&& | 邏輯與 |
?: | 三元 |
注:在js中,「%」不是一般數學意義上的模運算,而其實是「求餘」運算。兩個運算數都爲正數時,求模運算和求餘運算的值相同;兩個運算數存在負數時,求模運算和求餘運算的值則不相同。git
js包含一種原型鏈的特性,容許對象繼承另外一個對象的屬性。正確地使用它能減小初始化時消耗的時間和內存。正則表達式
若是屬性名是一個合法的js標識符且不是保留字,則不強制要求用引號括住屬性名。編程
反射 --- 檢查對象有什麼屬性數組
只用typeof是不夠的,原型鏈中的任何屬性都會返回值,如:bash
typeof flight.toString //fuuction
typeof flight.constructor //function
複製代碼
有兩種方法能夠去處理這些不須要的屬性:數據結構
所謂編程,就是將一組需求分解成一組函數與數據結構的技能。閉包
每一個函數在建立時會附加連個隱藏屬性:函數的上下文和實現函數行爲的代碼; 函數在調用時,除了有聲明是的形式參數,每一個函數還接收連個附加的參數:this
和 arguments
arguments 不是一個真正的數組,可使用一下方法來轉化爲真正數組:app
Array.prototype.slice.apply(arguments);
Array.prototype.concat(thisArg, arguments);
複製代碼
舉例:函數
function.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
}
複製代碼
經過給function.prototype
增長一個method
方法,咱們下次給對象增長方法的時候就沒必要鍵入prototype
這幾個字符。省去一些麻煩。工具
最後的作法是在函數體的頂部聲明函數中可能用到的全部變量。
可使用函數和閉包來構造模塊。模塊是一個提供接口卻隱藏狀態與實現的函數或對象。
模塊模式的通常形式 是:一個定義了私有變量和函數的函數; 利用閉包建立能夠訪問私有變量和函數的特權函數; 最後返回這個特權函數,或者把他們保存到一個可訪問的地方。模塊模式常常結合單例模式(Singleton Pattern)使用。
級聯
柯里化
把函數與傳遞給它的參數相結合, 產生出一個新的函數。
在那些基於類的語言中,繼承(inheritance或extends)提供了兩個有用的服務。
Function.method('new', function () {
// 建立一個新對象,它繼承自構造器函數的原型對象
var that = Object.create(this.prototype);
// 調用構造器函數, 綁定 -this- 到新對象上
var other = this.apply(that, arguments);
// 若是它的返回值不是一個對象, 就返回該新對象
return (typeof other === 'object' && other) || that
})
複製代碼
var myObject = maker(f, l, m, c, c);
複製代碼
==>
var myObject = maker({
first: f,
middle: m,
last: l,
state: s,
city: c
})
複製代碼
經過定製一個新的對象,咱們指明它與所基於的基本對象的區別。
一個函數化構造器的僞代碼模塊:
var constructor = function (spec, my) {
var that, 其餘的私有變量
my = my || {};
把共享的變量和函數添加到my中
that = 一個新對象
添加給that的特權方法
return that;
}
複製代碼
typeof [] //onject
var is_array = function (value) {
return Object.prototype.toString.apply(value) === '[object Array]';
}
複製代碼
有時候以爲註釋就像一個時間機器,我用它發送重要的信息給將來的我。
精簡的JS --- 主要內容:
在精簡JS中,函數是有詞法做用域的閉包
對象是無類別的。咱們能夠經過普通的賦值給任何對象增長一個新成員的屬性。一個對象能夠從另外一個對象繼承成員屬性。
這對建立新的對象和數組來講是一種很是方便的表示法。JS字面量是數據交換格式JSON的靈感
var isNumber = function isNumber(value){
return typeof value === 'number' && isFinite(value);
}
複製代碼
JS的對象永遠不會是真的空對象,由於它們能夠從原型鏈中取得成員屬性。
本書在豆瓣評分很高,但整本書看下來,說實話,到沒感受有特別多的感悟,可能本身學藝不精,還接受不到的大師的深層次的教導。
但收穫仍是有的: