国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【閱讀筆記】JavaScript語言精粹

cucumber / 3270人閱讀

摘要:對之前看高級程序設計時沒有注意到的一些知識點,結合本書做以補充語法注釋源于的型既可以出現在字符串字面量中,也可能出現在正則表達式字面量中,如故一般建議使用型注釋保留字語句變量參數屬性名運算符和標記等標識符不允許使用保留字,此外在對象字面量中

對之前看《JavaScript高級程序設計》時沒有注意到的一些知識點,結合本書做以補充

語法

注釋

源于PL/I的/* */型既可以出現在字符串字面量中,也可能出現在正則表達式字面量中,如

/*
 var a = /a*/.match(s);
*/

故一般建議使用//型注釋

保留字

語句、變量、參數、屬性名、運算符標記標識符不允許使用保留字,此外在對象字面量中,或用點運算提取對象屬性時,也都不能用保留字做屬性名

數字

JavaScript只有一種數字類型,即64位浮點數

字符串

1.JavaScript中所有的字符都是16位
2.轉義字符可以將反斜線引號,和控制字符等不被允許的字符插入到字符串中
3.u用來約定指定數字字符編碼"A"==="u0041"
4.字符串一旦被創建就無法被改變,只能通過+等操作符創建新字符串

語句

1.JavaScript中的代碼塊{}不會創建新的作用域,故變量應該定義在函數的頭部,而不是代碼塊中
2.被當做假的值false,null," ",0,NaN
3.JavaScript不允許在return關鍵字和表達式之間換行,也不允許在break關鍵字和標簽之間換行

對象

定義

JavaCript中的對象是可變鍵控集合,是屬性的容器,屬性名可以是包括空字符串在內的任意字符串,屬性值是除undefined值之外的任何值

對象字面量

一個對象字面量就是包圍在一對花括號中的零個或多個名/值對,其中若 屬性是合法的JavaScript標識符(字母開頭,加數字、下劃線組成)且不是保留字,則并不強制要求加引號

對象值得檢索

屬性名為非合法的JavaScript標識符,需用[]來讀值,為合法的標識符且不是保留字,則也可以用.來讀值,通常更傾向于.,因為其效率更高更緊湊,嘗試從undefined的成員屬性中讀值會導致TypeError異常,如

flight.equipment // undefined
flight.equipment.model // throw "TypeErrpr"

引用

對象通過引用傳遞,不會被傳遞,換句話說var a = {}; b = a;b則和a指向同一塊內存

原型

何為委托?沿原型鏈查找的過程就是委托(ps:原型鏈的末端是Object.prototype)

反射

獲取對象上的屬性而不要原型中的屬性,使用hasOwnProperty()檢查,若為對象實例上的屬性,則會返回true

枚舉

for in 可用來遍歷一個對象上的所有屬性名(包括實例和原型),但需注意的是for in遍歷出來的屬性是無序的

刪除

delete無法刪除原型中的屬性

減少全局變量污染

措施:聲明一個全局變量,作為命名空間,然后將應用資源都放到這個命名空間中,可以有效的減少與其他程序,組件,類庫的沖突

函數

函數對象

Js中函數就是對象,連接到Function.prototype上,而Function.prototype則連接到Object.prototype

函數字面量

函數字面量包含以下4個部分:
保留字:function
函數名:可省略,此外函數還可以通過函數名來進行遞歸調用
形參:函數中的形參不會被如普通變量一樣被初始化為undefined,而是在函數被調用的時候被初始化為實參所提供的值
語句:包圍在花括號中的一組語句被稱為函數的主體

調用

在一個函數中調用另一個函數,會暫停對當前函數的執行,并將控制權和參數傳遞給新函數,此外每個函數還會接收兩個附加參數thisarguments(其中this的值取決于函數的調用模式)

函數的調用模式主要存在以下4種:
1.方法調用模式:函數被保存為一個對象的屬性時,當此函數被調用時this即指向該對象
2.函數調用模式:當函數并非對象的屬性,就被當做一個函數調用時,this會被綁定到全局對象上,但這種設計在實際開發中會造成很多的不便,因此我們常會再聲明一個變量并將其賦值為this,如下:

var obj = {name:"aleen"};
obj.sayName = function(){
    var that = this;
    var say = function(){
        alert(that.name);
    }
    say();
}
obj.sayName();

3.構造器調用模式:使用new調用構造函數時,會創建一個連接到構造函數prototype成員的新對象,并將函數中的this綁定到新對象上
4.Apply調用模式:因為Js中的函數也是對象,所以函數也擁有方法,任何函數在調用時使用Apply方法,可以改變函數運行時this的運行對象(apply的第二個參數可傳入一個參數數組)

var obj = {age:21};
var sayName = function(){alert(this.age)}
sayName.apply(obj);

參數

arguments:在函數內部可以通過該變量訪問所有在函數運行時傳遞給函數的實參(包括沒有被形參接收的參數),但是注意arguments只是一個類數組的對象,擁有length屬性,但并沒有任何數組方法

返回

一個函數總會返回一個值,如果沒指定值,則返回undefined,注意當函數在調用時前面加上了new并且返回值不是一個對象,則返回新對象即this

異常處理

Js中可用throw來拋出異常

isNum = function(num){
    if(typeof num != "number"){
        throw {
            name:"type error",
            message:"there needs a number"
        }
    }
}

try{
 isNum("a");
}catch(e){
 document.writeln(e.name+";"+e.message);
}

擴充類型的功能

即使用prototype在原型上擴充實例可以共享的方法,但有一點需注意的是——基本類型的原型是公用結構,所以在類庫混用時需小心使用,保險的做法是只在確定沒有改方法時再添加它

遞歸

注意一些語言為尾遞歸提供了優化,可以顯著提高速度,但Js并沒有提供尾遞歸的優化,深度遞歸可能會因為堆棧溢出而運行失敗
尾遞歸示例:

var factorial = function  factorial(i,a){
    a = a||1;
    if(i<2){
       return a;
    }
    return factorial(i-1,a*i);
};
console.log(factorial(4));

作用域

沒有塊級作用域(ES6中已有塊級作用域了),故最好在函數頂部聲明所有函數體中可能用到的變量

閉包

一個函數可以訪問它被創建時的上下文環境,即成為閉包
此外:要避免在循環中創建函數

回調

回調函數是異步處理的,故不會因為網絡傳輸或服務器響應慢而導致客戶端出現假死狀態

模塊

簡而言之:模塊是一個提供接口卻隱藏狀態和實現的函數或對象
一般形式:定義一個擁有私有變量和特權函數(特權函數利用閉包特性可以訪問私有變量)的函數,最后返回這個特權函數或者將其保存到一個可訪問到的地方

級聯

級聯使得我們可以多帶帶在一條語句中依次調用同一個對象的很多方法

柯里化

簡單來說,柯里化就是將函數與傳遞給它的參數相結合產生新的函數的過程

function add(a,b){
    return a+b;
}
Function.prototype.curry = function(){
    var slice = Array.prototype.slice,
    args = slice.apply(arguments),
    that = this;
    return function(){
        return that.apply(null,args.concat(slice.apply(arguments)));
    };
}
var add1 = add.curry(1);
console.log(add1(6));

記憶

例如斐波那契

var fibonacci = function(n){ 
    return n < 2 ? n : fibonacci(n-1)+fibonacci(n-1)
    }
    

頻繁遞歸調用會消耗極大的資源,因此可以采用記憶策略,將已經計算過的值緩存起來

var fibonacci = function(){
    var meno = [0,1];
    var lib = function(n){
        var result = meno[n];
        if(typeof result !== "number"){
            result = fib(n-1)+fib(n-2);
            meno[n]=result;
        }
        return result;
    }
    return fib;
}();
數組

JavaScript中的數組是一種類似于數組的對象,它將數組的下標轉變成字符串,并用其作為屬性

數組字面量

數組字面量var num = [1,2,3];和對象字面量var num_obj = {"0":1,"1":2,"2",3}基本一致都是包含3個屬性的對象,但它們的原型不同,num的原型是Array.prototypenum_obj的原型是Object.prototype,故 numlength屬性而num_obj沒有

ps:不同于強類型的語言,Js中的數組元素可以是不同類型的值

長度

1.Js中的length屬性是沒有上界的,當使用大于或等于length的位置來存儲元素時,不會發生數組越界錯誤,而會自動增加length的值以容納新元素

2.length屬性的值不一定等于數組里的屬性個數,如

myArray[100]=true;
myArray.length //101
//數組中只包含一個屬性

3.[]下標運算符會將所含表達式轉換為一個字符串,當表達式有`toString方法時,就使用該方法的值

4.JavaScript中的數組下標必須是大于等于0并小于等于2的32次方-1的整數

5.設置更大的length不會給數組分配更多的空間,而把length設小將會導致所有下標大于等于新length的屬性會被刪除

刪除

因為數組也是對象,所以可以用delete來刪除數組中的元素,但它只會將那塊的值移除掉,而保留那塊的空間,故那塊的值就變成undefined了,因此常用splice方法來刪除元素,但此方法的特點在 刪除元素時是將被刪除的元素之后的元素全部移除,再不斷添加到新位置,這種做法對于大型數組來說效率不高

枚舉

數組可用for in來枚舉元素,但它不會保證數組元素的順序,因此我們常用在枚舉時我們常用for循環

數組和對象的判斷

由于在Js中,數組和對象極易混淆,所以一個較好的判斷其類型的方法是:

var is_Array = function (value){
    return Object.prototype.toString.apply(value).slice(8,-1) === "Array";
}

指定初始值

Js不會給數組元素預設初值,[]得到的新數組為空,訪問一個不存在的元素則是undefined

代碼風格

1.代碼塊內容和對象字面量縮進4個空格
2.if和()之間放置一個空格
3.每個逗號和冒號后面都使用一個空格
4.在if和while這樣的結構化語句里,始終使用代碼塊
5.將{放在一行的結尾,而不是第二行的開頭
6.盡量使程序具備自我說明,并添加必要注釋,推薦行注釋
7.盡量在每個函數開始的地方,聲明所有變量
8.避免switch語句塊的條件穿越到下一條case

優美的特性 毒瘤

全局變量

代碼塊中沒有塊級作用域

自動插入分號,故應該在將{放在上一行的尾部,而不是下一行的頭部

保留字,Js中的保留字不能用來做變量名和參數,當保留字被用作對象字面量的鍵值時,必須用""括起來,并用[]引用

糟粕

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/83595.html

相關文章

  • javascript語言精粹》學習筆記 - 繼承

    摘要:但采用構造器調用模式,即是使用了前綴去調用一個函數時,函數執行的方式會改變。對象包含構造器需要構造一個新的實例的所有信息。構造器的變量和內部函數變成了該實例的私有成員。 JavaScript 是一門弱類型語言,從不需要類型轉換。對象繼承關系變得無關緊要。對于一個對象來說重要的時它能夠做什么,而不是它從哪里來。 閱讀《javascript語言精粹》筆記! 偽類 js的原型存...

    harriszh 評論0 收藏0
  • 閱讀筆記javascript 語言精粹

    摘要:前言由于最近的項目用到了一些的代碼,所以我帶著好奇心,認真閱讀了這本書,粗略地了解語言的基本結構和特性,對于一些不熟悉的新概念,以記錄的形式加強印象,也是對學習的反思總結。 前言 由于最近的項目用到了一些js的代碼,所以我帶著好奇心,認真閱讀了這本書,粗略地了解js語言的基本結構和特性,對于一些不熟悉的新概念,以記錄的形式加強印象,也是對學習的反思總結。 一、字面量(literals...

    tangr206 評論0 收藏0
  • javascript語言精粹》學習筆記 - 對象

    摘要:對象適用于匯集和管理數據。一個對象字面量就是包圍在一對花括號的多個名值對。嘗試從對象里取值將會導致異常。亦不會觸及原型鏈中的任何對象。嚴格模式下,不能用刪除顯式聲明的標識符,名稱或具名函數。 Javascirpt里的對象是無類型的。它對新屬性的名字和屬性的值沒有任何的限制。對象適用于匯集和管理數據。對象可以包括其他對象,所以它們可以容易地表示成樹狀或者圖形結構。 對象字面量 ...

    LoftySoul 評論0 收藏0
  • javascript語言精粹》學習筆記 - 數組方法實現

    摘要:在中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了語言精粹中方法的一章,想記錄下書上的代碼,以便加深印象。方法移除數組中的第一個元素并且放回該元素。 在js中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了《javascript語言精粹》中方法的一章,想記錄下書上的代碼,以便加深印...

    felix0913 評論0 收藏0
  • JavaScript 語言精粹》讀書筆記 - 函數

    摘要:語言精粹讀書筆記第四章函數函數字面量函數字面量包含個部分第一部分,保留字第二部分,函數名,它可以被忽略。這個超級延遲綁定使得函數對高度復用。構造器調用模式一個函數,如果創建的目的就是希望結合的前綴來調用,那它就被稱為構造器構造。 《JavaScript 語言精粹》 讀書筆記 第四章 函數 Functions 函數字面量 函數字面量包含4個部分: 第一部分, 保留字 function...

    wdzgege 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<