數(shù)據(jù)類型判斷

typeof:

使用typeof可以判斷除了null之外所有數(shù)據(jù)類型,但是

typeof null // 'object'

這是因?yàn)樵趈s最初版本中使用的32位系統(tǒng),出于性能考慮,000開頭表示變量斯够,但是null的所有位數(shù)全是0,所以被錯(cuò)誤的判斷為對(duì)象喧锦。使用Object.prototype.toString.call(xx)方法可以得正確的數(shù)據(jù)類型读规。

Object.prototype.toString.call(null) // [object null]

判斷已知對(duì)象類型的方法: instanceof

instanceof 是用來(lái)判斷 A 是否為 B 的實(shí)例,表達(dá)式為:A instanceof B裸违,如果 A 是 B 的實(shí)例掖桦,則返回 true,否則返回 false。 在這里需要特別注意的是:instanceof 檢測(cè)的是原型供汛,我們用一段偽代碼來(lái)模擬其內(nèi)部執(zhí)行過(guò)程:

instanceof (A,B) = {
    var L = A.__proto__;
    var R = B.prototype;
    if(L === R) {
        // A的內(nèi)部屬性 __proto__ 指向 B 的原型對(duì)象
        return true;
    }
    return false;
}

從上述過(guò)程可以看出,當(dāng) A 的 proto 指向 B 的 prototype 時(shí)涌穆,就認(rèn)為 A 就是 B 的實(shí)例怔昨,我們?cè)賮?lái)看幾個(gè)例子:

[] instanceof Array; // true
{} instanceof Object;// true
new Date() instanceof Date;// true
 
function Person(){};
new Person() instanceof Person;
 
[] instanceof Object; // true
new Date() instanceof Object;// true
new Person instanceof Object;// true

從 instanceof 能夠判斷出 [ ].proto 指向 Array.prototype,而 Array.prototype.proto 又指向了Object.prototype宿稀,最終 Object.prototype.proto 指向了null趁舀,標(biāo)志著原型鏈的結(jié)束。因此祝沸,[]矮烹、Array越庇、Object 就在內(nèi)部形成了一條原型鏈:

image

從原型鏈可以看出,[] 的 proto 直接指向Array.prototype奉狈,間接指向 Object.prototype卤唉,所以按照 instanceof 的判斷規(guī)則,[] 就是Object的實(shí)例仁期。依次類推桑驱,類似的 new Date()、new Person() 也會(huì)形成一條對(duì)應(yīng)的原型鏈 跛蛋。因此熬的,instanceof 只能用來(lái)判斷兩個(gè)對(duì)象是否屬于實(shí)例關(guān)系****, 而不能判斷一個(gè)對(duì)象實(shí)例具體屬于哪種類型赊级。

instanceof 操作符的問(wèn)題在于押框,它假定只有一個(gè)全局執(zhí)行環(huán)境。如果網(wǎng)頁(yè)中包含多個(gè)框架理逊,那實(shí)際上就存在兩個(gè)以上不同的全局執(zhí)行環(huán)境强戴,從而存在兩個(gè)以上不同版本的構(gòu)造函數(shù)。如果你從一個(gè)框架向另一個(gè)框架傳入一個(gè)數(shù)組挡鞍,那么傳入的數(shù)組與在第二個(gè)框架中原生創(chuàng)建的數(shù)組分別具有各自不同的構(gòu)造函數(shù)骑歹。

constructor

[].constructor = Array
true.constructor = Boolean

注意:

  1. null 和 undefined 是無(wú)效的對(duì)象,因此是不會(huì)有 constructor 存在的墨微,這兩種類型的數(shù)據(jù)需要通過(guò)其他方式來(lái)判斷道媚。

  2. 函數(shù)的 constructor 是不穩(wěn)定的,這個(gè)主要體現(xiàn)在自定義對(duì)象上翘县,當(dāng)開發(fā)者重寫 prototype 后最域,原有的 constructor 引用會(huì)丟失,constructor 會(huì)默認(rèn)為 Object锈麸。

Object.prototype.toString.call

toString() 是 Object 的原型方法镀脂,調(diào)用該方法,默認(rèn)返回當(dāng)前對(duì)象的 [[Class]] 忘伞。這是一個(gè)內(nèi)部屬性薄翅,其格式為 [object Xxx] ,其中 Xxx 就是對(duì)象的類型氓奈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翘魄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舀奶,更是在濱河造成了極大的恐慌暑竟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件育勺,死亡現(xiàn)場(chǎng)離奇詭異但荤,居然都是意外死亡罗岖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門腹躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桑包,“玉大人,你說(shuō)我怎么就攤上這事潜慎〖穸啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵铐炫,是天一觀的道長(zhǎng)垒手。 經(jīng)常有香客問(wèn)我,道長(zhǎng)倒信,這世上最難降的妖魔是什么科贬? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鳖悠,結(jié)果婚禮上榜掌,老公的妹妹穿的比我還像新娘。我一直安慰自己乘综,他們只是感情好憎账,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卡辰,像睡著了一般胞皱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上九妈,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天反砌,我揣著相機(jī)與錄音,去河邊找鬼萌朱。 笑死宴树,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晶疼。 我是一名探鬼主播酒贬,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冒晰!你這毒婦竟也來(lái)了同衣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壶运,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浪秘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋情,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埠况,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棵癣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辕翰。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狈谊,靈堂內(nèi)的尸體忽然破棺而出喜命,到底是詐尸還是另有隱情,我是刑警寧澤河劝,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布壁榕,位于F島的核電站罚屋,受9級(jí)特大地震影響矫废,放射性物質(zhì)發(fā)生泄漏埃仪。R本人自食惡果不足惜腾降,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一职员、第九天 我趴在偏房一處隱蔽的房頂上張望举哟。 院中可真熱鬧呜袁,春花似錦越除、人聲如沸敞临。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挺尿。三九已至奏黑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間票髓,已是汗流浹背攀涵。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洽沟,地道東北人以故。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像裆操,于是被迫代替她去往敵國(guó)和親怒详。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • 下界降雨不斷踪区,可連天上都沉悶不見(jiàn)陽(yáng)光昆烁,我不免抑郁。 此刻缎岗,我騰著云往一處不起眼的懸崖而去静尼。幸虧兵央行事張揚(yáng),我輕而...
    屈寧歡閱讀 420評(píng)論 0 1
  • 晚上睡不著鸭巴,醒來(lái),一個(gè)念頭從腦海劃過(guò)拦盹,我給了孩子什么樣的教育鹃祖?很多時(shí)候,我在意的只是孩子的成績(jī)普舆,從來(lái)沒(méi)有在意過(guò)他的...
    雅志清新閱讀 718評(píng)論 12 19
  • 1 故事的開始沼侣,是在那個(gè)陽(yáng)光明媚的午后祖能。 她盯著湖中央那只一動(dòng)不動(dòng)的天鵝看了很久,直到它緩慢地移動(dòng)到了湖的另一邊华临。...
    2fafec4cec1b閱讀 284評(píng)論 0 0
  • 2017年2月9日芯杀,第一天 摘錄(序言至第一章): 1. 只有你先把大石頭放進(jìn)瓶子,你才可能放進(jìn)小石頭雅潭,再放沙子揭厚,...
    吳麗濱閱讀 718評(píng)論 0 3