《你不知道的JavaScript中卷》第一部分的讀書筆記

書的封面

這兩周主要看的第一部分非凌。第一部分由5章組成,現(xiàn)看到第一部分的第四章完結(jié)。做一下讀書筆記總結(jié)韧掩。

第一章 類型
第1章書中小結(jié)

具體細(xì)節(jié):

JavaScript有7種內(nèi)置類型:空值(null)、未定義(undefined)旭等、布爾值(boolean)酌呆、數(shù)字(number)、字符串(string)搔耕、對(duì)象(object)隙袁、符號(hào)(symbol,ES6中新增)弃榨。除對(duì)象之外菩收,其他統(tǒng)稱為“基本類型”。

我們可以用typeof運(yùn)算符來查看值的類型鲸睛,它返回的是類型的字符串值娜饵。

e.g.

typeof undefined === "undefined"; //true

typeof true === "boolean";//true

typeof 42 === "number";//true

typeof "42" === "string";//true

typeof {life:42} === "object";//true

typeof Symbol === "symbol";//true

利用符合條件檢測(cè)null 值的類型;

var a=null;

(!a && typeof a=== "object"); //true

null是“假值”腊凶,也是唯一一個(gè)用typeof檢測(cè)返回“object”的基本類型值划咐。

typeof function a(){} === "function";//true

typeof [1,2,3] === "object";//true

函數(shù)、數(shù)組都是object的一個(gè)“子類型”钧萍。函數(shù)對(duì)象的length屬性是其聲明的參數(shù)的個(gè)數(shù)褐缠。數(shù)組的length屬性是其元素的個(gè)數(shù)。


JavaScript中的變量是沒有類型的风瘦,只有值才有队魏。變量可以隨時(shí)持有任何類型的值。

e.g.

typeof typeof 42万搔;//"string"

typeof 42首先返回字符串"number",然后typeof "number" 返回"string"胡桨。


已在作用域中聲明但還沒有賦值的變量,是undefined的瞬雹。還沒有在作用域中聲明過的變量昧谊,是undeclared的。

e.g.

在程序中檢查全局變量DEBUG不出現(xiàn)ReferenceError錯(cuò)誤的方法:

1.if(typeof DEBUG !== "undefined"){}

2. if(window.DEBUG){}

瀏覽器中的全局對(duì)象是window酗捌,訪問不存在的對(duì)象屬性(甚至是全局對(duì)象window上)不會(huì)產(chǎn)生ReferenceError錯(cuò)誤呢诬。

3.“依賴注入”(dependency injection)設(shè)計(jì)模式,將依賴通過參數(shù)顯示地傳遞到函數(shù)中胖缤。

e.g.

fucntion doSomethingCool(FeatureXYZ){

var helper = FeatureXYZ || function (){};

var val = helper();

}

第2章 值


第2章書中小結(jié)1


第2章書中小結(jié)2

具體細(xì)節(jié):

使用delete運(yùn)算符可以將單元從數(shù)組中刪除尚镰,但是請(qǐng)注意,單元?jiǎng)h除后哪廓,數(shù)組的length屬性并不會(huì)發(fā)生變化狗唉。

在創(chuàng)建“稀疏”數(shù)組(sparse array,即含有空白或空缺單元的數(shù)組)時(shí)要特別注意:

e.g.

var a =[];

a[0] =1;

a[2] =[3];

a[1];//undefined

a.length;//3

a[1]的值為undefined涡真,但這與將其顯式賦值為undefined(a[1]=undefined)還是有所區(qū)別分俯。

數(shù)組通過數(shù)字進(jìn)行索引肾筐,但它們也是對(duì)象,所以也可以包含字符串鍵值和屬性(但這些并不計(jì)算在數(shù)組長(zhǎng)度內(nèi))澳迫。

e.g.

var a=[];

a[0]=1;

a["foobar"]=2;

a.length;//1

a["foobar"];//2

a.foobar;//2

如果字符串鍵值能夠被強(qiáng)制類型轉(zhuǎn)換為十進(jìn)制數(shù)字的話局齿,它就會(huì)被當(dāng)作數(shù)字索引來處理。

e.g.

var a=[];

a["13"]=42;

a.length;//14

在數(shù)組中加入字符串鍵值/屬性并不是一個(gè)好主意橄登。建議使用對(duì)象來存放鍵值/屬性值,用數(shù)組來存放數(shù)字索引值讥此。

有時(shí)需要將類數(shù)組(一組通過數(shù)字索引的值)轉(zhuǎn)換為真正的數(shù)組拢锹。工具函數(shù)slice()經(jīng)常被用于這類轉(zhuǎn)換:

function foo(){

var arr = Array.prototype.slice.call(arguments);

are.push("bam");

console.log(are);

}

foo("bar", "baz");//["bar","baz","bam"]

用ES6中的內(nèi)置函數(shù)工具Array.from()也能實(shí)現(xiàn)同樣的功能:

var arr = Array.from(arguments);


字符串反轉(zhuǎn):

var a="foo";

var c = a

//將a的值轉(zhuǎn)換為字符數(shù)組

.split("")

//將數(shù)組中的字符進(jìn)行倒轉(zhuǎn)

.reverse()

//將數(shù)組中的字符拼接回字符串

.join("");

c;//"oof"

這種方法對(duì)簡(jiǎn)單的字符串完全適用,對(duì)于包含(Unicode萄喳,如星號(hào)卒稳、多字節(jié)字符串等)的字符串并不適用。


JavaScript中的數(shù)字常量一般用十進(jìn)制表示他巨。

e.g.

var a=42充坑;

var b=42.3;

數(shù)字前的0可以省略:

var a=0.42染突;

var b=.42捻爷;

小數(shù)點(diǎn)后小數(shù)部分最后面的0也可以省略:

var a=42.0;

var=42.份企;

42.這種寫法沒問題也榄,只是不常見,但從代碼可讀性考慮司志,不建議這樣寫甜紫。

對(duì)于.運(yùn)算符需要給予特別注意,因?yàn)樗且粋€(gè)有效的數(shù)字字符骂远,會(huì)被優(yōu)先識(shí)別為數(shù)字常量的一部分囚霸,然后才是對(duì)象屬性訪問運(yùn)算符。

//無效語法:

42.toFixed(3);//SyntaxError

//下面的語法都有效:

(42).toFixed(3);//"42.000"

0.42.toFixed(3);//"0.420"

42..toFixed(3);//"42.000"


二進(jìn)制浮點(diǎn)數(shù)最大的問題(不僅JavaScript激才,所有遵循IEEE 754規(guī)范的語言都是如此)拓型,是會(huì)出現(xiàn)如下情況:

0.1 + 0.2 === 0.3;//false

最常見的方法是設(shè)置一個(gè)誤差范圍值贸营,通常稱為“機(jī)器精度”(machine epsilon)吨述,對(duì)JavaScript的數(shù)字來說,這個(gè)值通常是2^-52(2.230446049250313e-16)钞脂。

從ES6開始揣云,該值定義在Number.EPSILON中,我們可以直接拿來用冰啃,也可以為ES6之前的版本寫polyfill:

if (Number.EPSILON){

Number.EPSILON = Math.pow(2, -52);

}

可以使用Number.EPSILON來比較兩個(gè)數(shù)字是否相等(在指定的誤差范圍內(nèi)):

function numbersCloseEnoughToEqual(n1,n2){

return Math.abs(n1-n2) < Number.EPSILON;

}

var a=0.1+0.2;

var b = 0.3;

numbersCloseEnoughToEqual(a,b);//true

numbersCloseEnoughToEqual(0.0000001,0.0000002);//false


整數(shù)檢測(cè)

if(!Number.isInteger){

Number.isInteger=function(nun){

return typeof num ="number" && num %1==0;

};

}

檢測(cè)一個(gè)值是否是安全的整數(shù)

if(!Number.isSafeInteger){

Number.isSafeInteger=function(nun){

return Number.isSafeInteger(nun) && Math.abs(nun) <=Number.MAX_SAFE_INTEGER;

};

}


undefined類型只有一個(gè)值邓夕,即undefined刘莹。null 類型也只有一個(gè)值,即null焚刚。

e.g.

null 指空值(empty value)

undefined指沒有值(missing value)

或者

undefined 指從未賦值

null指曾賦過值点弯,但是目前沒有值

null 是一個(gè)特殊關(guān)鍵字,不是標(biāo)識(shí)符矿咕,我們不能將其當(dāng)作變量來使用和賦值抢肛。然而undefined卻是一個(gè)標(biāo)識(shí)符,可以被當(dāng)作變量來使用和賦值碳柱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捡絮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莲镣,更是在濱河造成了極大的恐慌福稳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑞侮,死亡現(xiàn)場(chǎng)離奇詭異的圆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)半火,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門越妈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慈缔,你說我怎么就攤上這事叮称。” “怎么了藐鹤?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瓤檐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我娱节,道長(zhǎng)挠蛉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任肄满,我火速辦了婚禮谴古,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稠歉。我一直安慰自己掰担,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布怒炸。 她就那樣靜靜地躺著带饱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勺疼,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天教寂,我揣著相機(jī)與錄音,去河邊找鬼执庐。 笑死酪耕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轨淌。 我是一名探鬼主播迂烁,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼猿诸!你這毒婦竟也來了婚被?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤梳虽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灾茁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窜觉,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年北专,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禀挫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拓颓,死狀恐怖语婴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驶睦,我是刑警寧澤砰左,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站场航,受9級(jí)特大地震影響缠导,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溉痢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一僻造、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孩饼,春花似錦髓削、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汽畴,卻和暖如春旧巾,著一層夾襖步出監(jiān)牢的瞬間耸序,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工鲁猩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坎怪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓廓握,卻偏偏與公主長(zhǎng)得像搅窿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隙券,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 值類型轉(zhuǎn)換將值從一種類型轉(zhuǎn)換為另一種類型通常稱為類型轉(zhuǎn)換男应,這是顯示的情況;隱式的情況稱為強(qiáng)制類型轉(zhuǎn)換娱仔。JavaSc...
    xpwei閱讀 3,529評(píng)論 0 5
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,216評(píng)論 0 4
  • 前端07班 王語句JavaScript程序的執(zhí)行單位為行(line)沐飘,也就是一行一行地執(zhí)行。一般情況下牲迫,每一行就是...
    ea203453e188閱讀 882評(píng)論 0 4
  • 5.28 「法」要「熱騰騰」地修 2014年 第16屆噶舉冬季辯經(jīng)大法會(huì) 噶當(dāng)派祖師說:「一切所聞之法耐朴,都應(yīng)即刻去...
    梵心正應(yīng)閱讀 206評(píng)論 0 0
  • 第一筛峭,絕不能透露半點(diǎn)私事兒,保持距離第二陪每,絕不寄托希望于他影晓,重點(diǎn)朝向楊哥與領(lǐng)導(dǎo) 第三,生死存亡也檩禾,留或者走挂签。 第四...
    瓊之加油閱讀 128評(píng)論 0 0