溫故而知新
精華
- 優(yōu)點(diǎn):弱類型、函數(shù)式、動態(tài)對象,對象字面量表示法
- 缺點(diǎn):全局變量
- 依賴全局變量來進(jìn)行連接,所有編譯單元的所有頂級變量被撮合到一個被稱為全局對象的公共命名空間。
- 爭議:原型繼承,存在一個無類型的對象系統(tǒng)
語法
數(shù)字
js只有一種數(shù)字類型也就是說沒有分理處整數(shù)類型和浮點(diǎn)數(shù)類型。所有1和1.0的值相同。
NaN是一個數(shù)值,表示不能產(chǎn)生正常結(jié)果的運(yùn)算結(jié)果。NaN不等于任何值,包括自己??梢杂胕sNaN(number)檢測。
Infinity表示所有電影1.7******e+308的值
字符串
js中所有字符都是16位的,也就是unicode。
js中沒有字符類型(注意字符和字符串區(qū)別)。要表示一個字符只需要創(chuàng)建一個包含一個字符的字符串即可。
字符串不可變這點(diǎn)和其他語言一樣。
語句
web瀏覽器中,每個<script>標(biāo)簽提供一個編譯且立即執(zhí)行的編譯單元。因為缺少鏈接器,js把他們一起跑到一個公共的全局名字空間。
var用在函數(shù)內(nèi)部,表示這個函數(shù)的私有變量。
js中當(dāng)做假的值
- false
- null
- undefined
- 數(shù)字0
- 數(shù)字NaN
其他所有的值都會被當(dāng)做真,包括ture,字符串“false”以及所有對象。
字面量
字面量是一種可以方便地按照指定規(guī)格創(chuàng)建新的對象的表示方法。個人理解類似于iOS中快速創(chuàng)建,數(shù)組,字典等形式。也可以叫做語法糖。
對象
簡單數(shù)據(jù)類型:數(shù)字,字符串,布爾值、null和undefined。雖然數(shù)字,字符串擁有方法,貌似對象,但是他們是不可變的。其余的值所有所有都是對象。
js中的對象是可變的鍵值集合,數(shù)組,函數(shù),正則都是對象。當(dāng)然對象也是對象。
屬性值可以是除了undefined值之外所有值。
js里面的對象是無類型的。對新屬性的名稱和屬性沒有限制。
js包含一個原型鏈的特性,允許對象繼承另一個對象的屬性正確使用能減少對象初始化的時間和內(nèi)存。
對象字面量
var empty_object = {
"name": "wesly",
"age": 12
};
屬性名是包括空字符串在內(nèi)的任何字符串
對象可以嵌套
檢索
empty_object.name//wesly
如果成員屬性并不存在則返回undefined
||運(yùn)算符可以用來填充默認(rèn)值比如var age = empty_object.age||12
如果從undefined的成員屬性中獲取值將會導(dǎo)致TypeError.這個時候可以通過&&來避免。先判斷比如empty_object && empty_object.age
引用
這點(diǎn)和其他高級語言一樣,對象通過引用來傳遞。
原型
用于繼承
每個對象都連接到一個原型對象,并且可以從中繼承屬性。所有通過字面量創(chuàng)建的對象都連接到Object.prototype,它是js中標(biāo)配對象
創(chuàng)建一個對象的時候可以選擇某個對象作為它的原型。
原型連接在更新的時候不起作用,當(dāng)對某個對象做出改變時,不會觸及到該對象的原型。
反射
檢查對象的屬性是什么類型用typeof。注意原型鏈中的任何屬性都會產(chǎn)生值function
使用hasOwnProperty監(jiān)測對象是否對該屬性獨(dú)有。它不會檢查原型鏈。
枚舉
for in可用于遍歷對象中所有的屬性名。用typeof排除函數(shù),用hasOwnProperty排除原型鏈中的
屬性名出現(xiàn)的順序不確定,如果需要確定,用一個數(shù)組來確定順序。
刪除
刪除屬性在其他語言中還真是不多見
delete可以用原來刪除對象的屬性。
它不會觸及原型鏈中的任何對象。這種方式可以讓原型鏈中的屬性暴露出來。
減少全局變量的污染
js可以所以的定義全局變量容乃應(yīng)用需要的所有資源,但是全局變量會削弱程序的靈活性。
最小化全局變量方法之一就是創(chuàng)建一個唯一的全局比那里。
var MyApp = {};MyApp變?yōu)閼?yīng)用的容器。其次還可以使用閉包來進(jìn)行信息隱藏。