前言:其實(shí)嚴(yán)格說(shuō)來(lái)這篇文章并不是真正介紹原型和原型鏈的延旧,但是卻是原型和原型鏈的基礎(chǔ)厌漂,是必須,是前提烧栋。當(dāng)你把我這幾篇有關(guān)原型和原型鏈的文章看完后写妥,你才發(fā)現(xiàn),本篇原型和原型鏈(一)起了很重要的輔助作用审姓。 畫圖不易珍特,轉(zhuǎn)載請(qǐng)注明出處。謝謝~
關(guān)鍵詞:全局對(duì)象Window魔吐,全局函數(shù)扎筒,公用屬性......
正文:
一、全局對(duì)象Window
- window是一個(gè)對(duì)象酬姆,不管在哪個(gè)網(wǎng)頁(yè)嗜桌,一定可以訪問一個(gè)叫window的對(duì)象。
- 在ECMAScript里面辞色,這個(gè)對(duì)象叫做global,在瀏覽器里成為window
-
window下面的屬性分為2類骨宠,一類為ECMAScript規(guī)定,一類為瀏覽器私有相满,舉個(gè)栗子层亿,如下圖:
二、以Number為例
問個(gè)問題立美,Number()的作用棕所?
大部分人會(huì)說(shuō):Number() 函數(shù)把對(duì)象的值轉(zhuǎn)換為數(shù)字,如果對(duì)象的值無(wú)法轉(zhuǎn)換為數(shù)字悯辙,那么 Number() 函數(shù)返回 NaN琳省。
正確,沒有問題躲撰。但是Number還有第二個(gè)用法:那就是它可以聲明一個(gè)number對(duì)象针贬。
Number() : - 用法一:window是一個(gè)對(duì)象,不管在哪個(gè)網(wǎng)頁(yè)拢蛋,一定可以訪問一個(gè)叫window的對(duì)象桦他。
-
用法二:在ECMAScript里面,這個(gè)對(duì)象叫做global,在瀏覽器里成為window
比如說(shuō)谆棱,var n = new number(1);先不要管new是什么快压,這個(gè)式子圆仔,就是我傳進(jìn)去了一個(gè)1,那么蔫劣,返回了什么呢坪郭?答,返回了一個(gè)對(duì)象脉幢,{valueOf:1}歪沃,那為什么會(huì)返回一個(gè)對(duì)象?下面跟我看內(nèi)存圖吧嫌松,(不了解內(nèi)存圖的請(qǐng)觀看我寫的另一篇關(guān)于內(nèi)存圖的文章)上圖解答:
var n1 = 1;
var n2 = new Number(1);
n1和n2有什么區(qū)別沪曙?-----內(nèi)存不同
看到這里,初學(xué)者可能會(huì)有疑問萎羔,既然液走,n1.toString() 可以返回“1”,n2.toString()也可以返回贾陷,那我為什么要寫那么多new number()呢缘眶,這多長(zhǎng)呀?
接下來(lái)就和歷史有關(guān)了昵宇,當(dāng)初磅崭,var n = 1,如果想n.tostring()怎么辦儿子?不行呀瓦哎,n不是對(duì)象啊,它沒有toString()這個(gè)方法柔逼,那怎么辦呢蒋譬?我們的js作者就想了一個(gè)辦法:
好,我們現(xiàn)在重新梳理下:
當(dāng) var n = 1;
n.toString();
當(dāng)這個(gè)時(shí)候愉适,我們的內(nèi)存出現(xiàn)了什么變化犯助?
是不是覺得挺簡(jiǎn)單的,不是很麻煩呢维咸?那現(xiàn)在考你們一道題剂买,檢驗(yàn)下上面的你們看懂了沒:
var n = 1
n.xxx = 2
n.xxx=?
心里有沒有答案?我們還是來(lái)看內(nèi)存圖:
所以癌蓖,答案就是:
那我們現(xiàn)在再練習(xí)一道:
var f = false;
var f2 = new Boolean(false)
if(f){console.log(1)}
if(f2){console.log(2)}
那么最后到底會(huì)打印出1還是2呢瞬哼?
答案:2
new Boolean(false)返回了一個(gè)false對(duì)象,false對(duì)象不是false嗎租副?當(dāng)然不是坐慰,讓我們回顧一下五個(gè)falsy值:
0,NaN用僧,空字符串结胀,null赞咙,undefined。只有這些才是false糟港。記得哦攀操,所有對(duì)象都是true哦。
再試試:
var o1 ={}
var o2 ={}
o1===o2?
當(dāng)然是錯(cuò)嘍着逐,用內(nèi)存圖想一想崔赌。兩個(gè)分別指向了兩個(gè)不同的堆地址,怎么可能全等嘛耸别。
有了這些知識(shí)健芭,再去了解原型和原型鏈就會(huì)容易很多啦。更多精彩請(qǐng)看原型和原型鏈二秀姐。