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

資訊專欄INFORMATION COLUMN

【閱讀筆記】JavaScript語(yǔ)言精粹

cucumber / 3262人閱讀

摘要:對(duì)之前看高級(jí)程序設(shè)計(jì)時(shí)沒(méi)有注意到的一些知識(shí)點(diǎn),結(jié)合本書做以補(bǔ)充語(yǔ)法注釋源于的型既可以出現(xiàn)在字符串字面量中,也可能出現(xiàn)在正則表達(dá)式字面量中,如故一般建議使用型注釋保留字語(yǔ)句變量參數(shù)屬性名運(yùn)算符和標(biāo)記等標(biāo)識(shí)符不允許使用保留字,此外在對(duì)象字面量中

對(duì)之前看《JavaScript高級(jí)程序設(shè)計(jì)》時(shí)沒(méi)有注意到的一些知識(shí)點(diǎn),結(jié)合本書做以補(bǔ)充

語(yǔ)法

注釋

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

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

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

保留字

語(yǔ)句、變量、參數(shù)、屬性名、運(yùn)算符標(biāo)記標(biāo)識(shí)符不允許使用保留字,此外在對(duì)象字面量中,或用點(diǎn)運(yùn)算提取對(duì)象屬性時(shí),也都不能用保留字做屬性名

數(shù)字

JavaScript只有一種數(shù)字類型,即64位浮點(diǎn)數(shù)

字符串

1.JavaScript中所有的字符都是16位
2.轉(zhuǎn)義字符可以將反斜線引號(hào),和控制字符等不被允許的字符插入到字符串中
3.u用來(lái)約定指定數(shù)字字符編碼"A"==="u0041"
4.字符串一旦被創(chuàng)建就無(wú)法被改變,只能通過(guò)+等操作符創(chuàng)建新字符串

語(yǔ)句

1.JavaScript中的代碼塊{}不會(huì)創(chuàng)建新的作用域,故變量應(yīng)該定義在函數(shù)的頭部,而不是代碼塊中
2.被當(dāng)做假的值false,null," ",0,NaN
3.JavaScript不允許在return關(guān)鍵字和表達(dá)式之間換行,也不允許在break關(guān)鍵字和標(biāo)簽之間換行

對(duì)象

定義

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

對(duì)象字面量

一個(gè)對(duì)象字面量就是包圍在一對(duì)花括號(hào)中的零個(gè)或多個(gè)名/值對(duì),其中若 屬性是合法的JavaScript標(biāo)識(shí)符(字母開頭,加數(shù)字、下劃線組成)且不是保留字,則并不強(qiáng)制要求加引號(hào)

對(duì)象值得檢索

屬性名為非合法的JavaScript標(biāo)識(shí)符,需用[]來(lái)讀值,為合法的標(biāo)識(shí)符且不是保留字,則也可以用.來(lái)讀值,通常更傾向于.,因?yàn)槠湫矢吒o湊,嘗試從undefined的成員屬性中讀值會(huì)導(dǎo)致TypeError異常,如

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

引用

對(duì)象通過(guò)引用傳遞,不會(huì)被傳遞,換句話說(shuō)var a = {}; b = a;b則和a指向同一塊內(nèi)存

原型

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

反射

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

枚舉

for in 可用來(lái)遍歷一個(gè)對(duì)象上的所有屬性名(包括實(shí)例和原型),但需注意的是for in遍歷出來(lái)的屬性是無(wú)序的

刪除

delete無(wú)法刪除原型中的屬性

減少全局變量污染

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

函數(shù)

函數(shù)對(duì)象

Js中函數(shù)就是對(duì)象,連接到Function.prototype上,而Function.prototype則連接到Object.prototype

函數(shù)字面量

函數(shù)字面量包含以下4個(gè)部分:
保留字:function
函數(shù)名:可省略,此外函數(shù)還可以通過(guò)函數(shù)名來(lái)進(jìn)行遞歸調(diào)用
形參:函數(shù)中的形參不會(huì)被如普通變量一樣被初始化為undefined,而是在函數(shù)被調(diào)用的時(shí)候被初始化為實(shí)參所提供的值
語(yǔ)句:包圍在花括號(hào)中的一組語(yǔ)句被稱為函數(shù)的主體

調(diào)用

在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù),會(huì)暫停對(duì)當(dāng)前函數(shù)的執(zhí)行,并將控制權(quán)和參數(shù)傳遞給新函數(shù),此外每個(gè)函數(shù)還會(huì)接收兩個(gè)附加參數(shù)thisarguments(其中this的值取決于函數(shù)的調(diào)用模式)

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

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

3.構(gòu)造器調(diào)用模式:使用new調(diào)用構(gòu)造函數(shù)時(shí),會(huì)創(chuàng)建一個(gè)連接到構(gòu)造函數(shù)prototype成員的新對(duì)象,并將函數(shù)中的this綁定到新對(duì)象上
4.Apply調(diào)用模式:因?yàn)镴s中的函數(shù)也是對(duì)象,所以函數(shù)也擁有方法,任何函數(shù)在調(diào)用時(shí)使用Apply方法,可以改變函數(shù)運(yùn)行時(shí)this的運(yùn)行對(duì)象(apply的第二個(gè)參數(shù)可傳入一個(gè)參數(shù)數(shù)組)

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

參數(shù)

arguments:在函數(shù)內(nèi)部可以通過(guò)該變量訪問(wèn)所有在函數(shù)運(yùn)行時(shí)傳遞給函數(shù)的實(shí)參(包括沒(méi)有被形參接收的參數(shù)),但是注意arguments只是一個(gè)類數(shù)組的對(duì)象,擁有l(wèi)ength屬性,但并沒(méi)有任何數(shù)組方法

返回

一個(gè)函數(shù)總會(huì)返回一個(gè)值,如果沒(méi)指定值,則返回undefined,注意當(dāng)函數(shù)在調(diào)用時(shí)前面加上了new并且返回值不是一個(gè)對(duì)象,則返回新對(duì)象即this

異常處理

Js中可用throw來(lái)拋出異常

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);
}

擴(kuò)充類型的功能

即使用prototype在原型上擴(kuò)充實(shí)例可以共享的方法,但有一點(diǎn)需注意的是——基本類型的原型是公用結(jié)構(gòu),所以在類庫(kù)混用時(shí)需小心使用,保險(xiǎn)的做法是只在確定沒(méi)有改方法時(shí)再添加它

遞歸

注意一些語(yǔ)言為尾遞歸提供了優(yōu)化,可以顯著提高速度,但Js并沒(méi)有提供尾遞歸的優(yōu)化,深度遞歸可能會(huì)因?yàn)槎褩R绯龆\(yùn)行失敗
尾遞歸示例:

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

作用域

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

閉包

一個(gè)函數(shù)可以訪問(wèn)它被創(chuàng)建時(shí)的上下文環(huán)境,即成為閉包
此外:要避免在循環(huán)中創(chuàng)建函數(shù)

回調(diào)

回調(diào)函數(shù)是異步處理的,故不會(huì)因?yàn)榫W(wǎng)絡(luò)傳輸或服務(wù)器響應(yīng)慢而導(dǎo)致客戶端出現(xiàn)假死狀態(tài)

模塊

簡(jiǎn)而言之:模塊是一個(gè)提供接口卻隱藏狀態(tài)和實(shí)現(xiàn)的函數(shù)或?qū)ο?br>一般形式:定義一個(gè)擁有私有變量和特權(quán)函數(shù)(特權(quán)函數(shù)利用閉包特性可以訪問(wèn)私有變量)的函數(shù),最后返回這個(gè)特權(quán)函數(shù)或者將其保存到一個(gè)可訪問(wèn)到的地方

級(jí)聯(lián)

級(jí)聯(lián)使得我們可以多帶帶在一條語(yǔ)句中依次調(diào)用同一個(gè)對(duì)象的很多方法

柯里化

簡(jiǎn)單來(lái)說(shuō),柯里化就是將函數(shù)與傳遞給它的參數(shù)相結(jié)合產(chǎn)生新的函數(shù)的過(guò)程

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)
    }
    

頻繁遞歸調(diào)用會(huì)消耗極大的資源,因此可以采用記憶策略,將已經(jīng)計(jì)算過(guò)的值緩存起來(lái)

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;
}();
數(shù)組

JavaScript中的數(shù)組是一種類似于數(shù)組的對(duì)象,它將數(shù)組的下標(biāo)轉(zhuǎn)變成字符串,并用其作為屬性

數(shù)組字面量

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

ps:不同于強(qiáng)類型的語(yǔ)言,Js中的數(shù)組元素可以是不同類型的值

長(zhǎng)度

1.Js中的length屬性是沒(méi)有上界的,當(dāng)使用大于或等于length的位置來(lái)存儲(chǔ)元素時(shí),不會(huì)發(fā)生數(shù)組越界錯(cuò)誤,而會(huì)自動(dòng)增加length的值以容納新元素

2.length屬性的值不一定等于數(shù)組里的屬性個(gè)數(shù),如

myArray[100]=true;
myArray.length //101
//數(shù)組中只包含一個(gè)屬性

3.[]下標(biāo)運(yùn)算符會(huì)將所含表達(dá)式轉(zhuǎn)換為一個(gè)字符串,當(dāng)表達(dá)式有`toString方法時(shí),就使用該方法的值

4.JavaScript中的數(shù)組下標(biāo)必須是大于等于0并小于等于2的32次方-1的整數(shù)

5.設(shè)置更大的length不會(huì)給數(shù)組分配更多的空間,而把length設(shè)小將會(huì)導(dǎo)致所有下標(biāo)大于等于新length的屬性會(huì)被刪除

刪除

因?yàn)閿?shù)組也是對(duì)象,所以可以用delete來(lái)刪除數(shù)組中的元素,但它只會(huì)將那塊的值移除掉,而保留那塊的空間,故那塊的值就變成undefined了,因此常用splice方法來(lái)刪除元素,但此方法的特點(diǎn)在 刪除元素時(shí)是將被刪除的元素之后的元素全部移除,再不斷添加到新位置,這種做法對(duì)于大型數(shù)組來(lái)說(shuō)效率不高

枚舉

數(shù)組可用for in來(lái)枚舉元素,但它不會(huì)保證數(shù)組元素的順序,因此我們常用在枚舉時(shí)我們常用for循環(huán)

數(shù)組和對(duì)象的判斷

由于在Js中,數(shù)組和對(duì)象極易混淆,所以一個(gè)較好的判斷其類型的方法是:

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

指定初始值

Js不會(huì)給數(shù)組元素預(yù)設(shè)初值,[]得到的新數(shù)組為空,訪問(wèn)一個(gè)不存在的元素則是undefined

代碼風(fēng)格

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

優(yōu)美的特性 毒瘤

全局變量

代碼塊中沒(méi)有塊級(jí)作用域

自動(dòng)插入分號(hào),故應(yīng)該在將{放在上一行的尾部,而不是下一行的頭部

保留字,Js中的保留字不能用來(lái)做變量名和參數(shù),當(dāng)保留字被用作對(duì)象字面量的鍵值時(shí),必須用""括起來(lái),并用[]引用

糟粕

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83595.html

相關(guān)文章

  • javascript語(yǔ)言精粹》學(xué)習(xí)筆記 - 繼承

    摘要:但采用構(gòu)造器調(diào)用模式,即是使用了前綴去調(diào)用一個(gè)函數(shù)時(shí),函數(shù)執(zhí)行的方式會(huì)改變。對(duì)象包含構(gòu)造器需要構(gòu)造一個(gè)新的實(shí)例的所有信息。構(gòu)造器的變量和內(nèi)部函數(shù)變成了該實(shí)例的私有成員。 JavaScript 是一門弱類型語(yǔ)言,從不需要類型轉(zhuǎn)換。對(duì)象繼承關(guān)系變得無(wú)關(guān)緊要。對(duì)于一個(gè)對(duì)象來(lái)說(shuō)重要的時(shí)它能夠做什么,而不是它從哪里來(lái)。 閱讀《javascript語(yǔ)言精粹》筆記! 偽類 js的原型存...

    harriszh 評(píng)論0 收藏0
  • 閱讀筆記javascript 語(yǔ)言精粹

    摘要:前言由于最近的項(xiàng)目用到了一些的代碼,所以我?guī)е闷嫘模J(rèn)真閱讀了這本書,粗略地了解語(yǔ)言的基本結(jié)構(gòu)和特性,對(duì)于一些不熟悉的新概念,以記錄的形式加強(qiáng)印象,也是對(duì)學(xué)習(xí)的反思總結(jié)。 前言 由于最近的項(xiàng)目用到了一些js的代碼,所以我?guī)е闷嫘模J(rèn)真閱讀了這本書,粗略地了解js語(yǔ)言的基本結(jié)構(gòu)和特性,對(duì)于一些不熟悉的新概念,以記錄的形式加強(qiáng)印象,也是對(duì)學(xué)習(xí)的反思總結(jié)。 一、字面量(literals...

    tangr206 評(píng)論0 收藏0
  • javascript語(yǔ)言精粹》學(xué)習(xí)筆記 - 對(duì)象

    摘要:對(duì)象適用于匯集和管理數(shù)據(jù)。一個(gè)對(duì)象字面量就是包圍在一對(duì)花括號(hào)的多個(gè)名值對(duì)。嘗試從對(duì)象里取值將會(huì)導(dǎo)致異常。亦不會(huì)觸及原型鏈中的任何對(duì)象。嚴(yán)格模式下,不能用刪除顯式聲明的標(biāo)識(shí)符,名稱或具名函數(shù)。 Javascirpt里的對(duì)象是無(wú)類型的。它對(duì)新屬性的名字和屬性的值沒(méi)有任何的限制。對(duì)象適用于匯集和管理數(shù)據(jù)。對(duì)象可以包括其他對(duì)象,所以它們可以容易地表示成樹狀或者圖形結(jié)構(gòu)。 對(duì)象字面量 ...

    LoftySoul 評(píng)論0 收藏0
  • javascript語(yǔ)言精粹》學(xué)習(xí)筆記 - 數(shù)組方法實(shí)現(xiàn)

    摘要:在中數(shù)組是經(jīng)常被使用到的,我們除了要學(xué)習(xí)數(shù)組的方法,還需要了解誒一下某一些方法是如何來(lái)實(shí)現(xiàn)的。然而我看了語(yǔ)言精粹中方法的一章,想記錄下書上的代碼,以便加深印象。方法移除數(shù)組中的第一個(gè)元素并且放回該元素。 在js中數(shù)組是經(jīng)常被使用到的,我們除了要學(xué)習(xí)數(shù)組的方法,還需要了解誒一下某一些方法是如何來(lái)實(shí)現(xiàn)的。然而我看了《javascript語(yǔ)言精粹》中方法的一章,想記錄下書上的代碼,以便加深印...

    felix0913 評(píng)論0 收藏0
  • JavaScript 語(yǔ)言精粹》讀書筆記 - 函數(shù)

    摘要:語(yǔ)言精粹讀書筆記第四章函數(shù)函數(shù)字面量函數(shù)字面量包含個(gè)部分第一部分,保留字第二部分,函數(shù)名,它可以被忽略。這個(gè)超級(jí)延遲綁定使得函數(shù)對(duì)高度復(fù)用。構(gòu)造器調(diào)用模式一個(gè)函數(shù),如果創(chuàng)建的目的就是希望結(jié)合的前綴來(lái)調(diào)用,那它就被稱為構(gòu)造器構(gòu)造。 《JavaScript 語(yǔ)言精粹》 讀書筆記 第四章 函數(shù) Functions 函數(shù)字面量 函數(shù)字面量包含4個(gè)部分: 第一部分, 保留字 function...

    wdzgege 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<