《javascript語言精粹》學習筆記1

做爲一個前端的學習者,以前因爲時間趕且懶的特性,沒有好好的學習一下js的特性,只看了w3cschool的基礎教程,知道語法後就用起了jQuery框架,js的不少基礎徹底沒有接觸理解。 這段時間瞭解到,js基礎仍是要好好學,對之後找工開發都有好處。<br> 進入正題,一下大部分是書上的東西,只是想看過一遍後,本身再過一遍加深理解。<br> 第一章是說明js的背景,略。<br> 第二章是js基礎語法,略之。<br>前端

第三章講對象。 1.數據類型

首先應該明確的是js的數據類型,包括簡單數據類型(數字,字符串,布爾值,null值,undefined值),對象(數組,函數,正則表達式,對象)。簡單數據對象擁有方法,可是不可變。對象是屬性的容器,每一個屬性擁有屬性和值。 2.對象字面量

對象的定義使用花括號正則表達式

<!-- lang: js -->
var stooge = {"first_name":"Jerome","last_name":"Howard"};

3.檢索

訪問對象能夠經過兩種方式,優先考慮.的表示方法,由於緊湊,可讀性好數組

<!-- lang: js -->
stooge["first_name"];
stooge.first_name;

4.更新

經過賦值語句來更新。若是以前沒那個對象名,就會直接擴充到已有對象中。框架

<!-- lang: js -->
stooge["first_name"] = "gao"
stooge.first_name = "gao";

5.引用

對象經過引用來傳遞,他們永遠不會被複制。函數

<!-- lang: js -->
var a = {};var b = {};var c = {};//這是3個不一樣的空對象
var a = b = c = {};//a,b,c都引用同一個對象

6.原型

每一個對象對鏈接到一個原型對象,而且它能夠從中繼承屬性,全部經過對象字面量建立的對象都鏈接到Object .prototype。 原型鏈接在更新值的時候是不會更改到該對象的原型的,原型鏈接只有在檢索值的時候纔會被用到,當咱們嘗試去獲取對象的屬性值的時候,若是沒有,js會試着從原型對象中獲取屬性值。若是沒有,再從它的原型找,直到到達終點Object.prototype。若是仍是不存在於原型鏈中,則返回undefined。這個過程叫委託學習

<!-- lang: js -->
var flight.equipment = {
    airline:"Oceanic",
    number:815,
    departure:{
        IATA:"SYD",
        time:"2004-09-22 14:55",
        city:"Sydney"
    },
    arrivak:{
        IATA:"LAX",
        time:"2004-09-23 10:42",
        city:"Sydney"
    }
};

if(typeof Object.beget !== 'function') {
    Object.create = function (o) {
        var F = function () {};
        F.prototype = o;
        return  new F();
    };
}
var another_flight = Object.create(flight);
another_flight['airline'];//"Oceanic"
flight.id = 10086;
another_flight['id'];//10086

7.反射

檢查對象並肯定對象有什麼屬性ui

<!-- lang: js -->
typeof flight.number;//"number"
typeof flight.status;//"undefined"
typeof flight.id;//"number"

hasOwnProperty方法則不會檢查原型鏈prototype

<!-- lang: js -->
flight.hasOwnProperty('number');//true
another_flight.hasOwnProperty('number');//false

8.枚舉

使用 for in 語句,可用hasOwnProperty方法作過濾器,以及typeof來排除函數。 屬性名的出現順序是不肯定的,能夠先把知道的屬性名保存在一個數組中,順尋排好,而後經過一個循環獲得按照順序排列的屬性值。code

<!-- lang: js -->
var i;
var properties = {'airline','number','departure','arrivak'};
for (i = 0;i < properties.length; i += 1){
    document.writeln(properties[i] + ':' + another_flight[properties[i]]);
}
//airline:Oceanic number:815 departure:[object Object] arrivak:[object Object]

9.刪除

刪除對象的屬性可能會讓來自原型鏈中的屬性透露出來對象

<!-- lang: js -->
another_flight.number = 1000;
another_flight.number;    //1000
delete another_flight.number;
another_flight.number;//815

10.減小全局變量污染

最小化使用全局變量的方法之一就是爲應用只建立一個惟一的全局變量

<!-- lang: js -->
var MYAPP = {};
MYAPP.stooge = {
    "id":10101,
    "number":1038
}

此時,該變量變成了應用的容器。

相關文章
相關標籤/搜索