成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端面試回顧(2)---類型檢測(cè)

fnngj / 877人閱讀

摘要:運(yùn)算符用來(lái)判斷一個(gè)構(gòu)造函數(shù)的屬性所指向的對(duì)象是否存在另外一個(gè)要檢測(cè)對(duì)象的原型鏈上。所以大多數(shù)時(shí)候它返回的都是一個(gè)對(duì)象的構(gòu)造函數(shù)。想到了構(gòu)造函數(shù)可能不一樣,但說(shuō)怎么判斷就有點(diǎn)想不出詞了,就持續(xù)懵逼中這篇內(nèi)容參考了高級(jí)程序設(shè)計(jì)和一篇文章

一個(gè)經(jīng)典的面試題

怎么去區(qū)分一個(gè)變量是一個(gè)數(shù)組還是一個(gè)對(duì)象呢?

typeof

看到這個(gè)題目,可能首先就會(huì)typeof,typeof是最基本的數(shù)據(jù)類型判斷方式,在不考慮es6的情況下,typeof可能的返回值有下面這些:

"undefined"        //如果這個(gè)值未定義
"boolean"        //如果這個(gè)值是布爾值
"string"        //如果這個(gè)值是字符串
"number"        //如果這個(gè)值是數(shù)值
"object"        //如果這個(gè)值是對(duì)象或null
"function"        //如果這個(gè)值是函數(shù)

你可以發(fā)現(xiàn)typeof可能的返回值并沒(méi)有array,也就是說(shuō)typeof并不能幫你檢測(cè)出一個(gè)數(shù)組。事實(shí)上,無(wú)論引用的是什么類型的對(duì)象,它都返回 "object"。如果使用typeof去檢測(cè)一個(gè)數(shù)組,返回的也將會(huì)是"object"。

instanceof

instanceof運(yùn)算符用來(lái)判斷一個(gè)構(gòu)造函數(shù)的prototype屬性所指向的對(duì)象是否存在另外一個(gè)要檢測(cè)對(duì)象的原型鏈上。
使用它的方式是:obj instanceof Object
這句話檢測(cè)Object.prototype是否存在于參數(shù)obj的原型鏈上。
其實(shí)它已經(jīng)能夠很好區(qū)別開(kāi)對(duì)象和數(shù)組了,看下面的例子:

var arr = [1, 2];
var obj = {
    name: "name"
}
console.log(arr instanceof Array);         //true
console.log(obj instanceof Array);         //false

但它也有一丟丟問(wèn)題,既然它會(huì)去在整個(gè)原型鏈上去找,而ECMAScript中Object是所有對(duì)象的基礎(chǔ),那么,如果使用instanceof去判斷一個(gè)數(shù)組是不是對(duì)象的時(shí)候,會(huì)不會(huì)也返回true呢?

var arr = [1,2];

console.log(arr instanceof Object);        //true
console.log(arr instanceof Array);        //true

答案是肯定的,所以感覺(jué)這種判斷方式也有小瑕疵。

constructor

constructor 屬性返回對(duì)創(chuàng)建此對(duì)象的函數(shù)的引用。所以大多數(shù)時(shí)候它返回的都是一個(gè)對(duì)象的構(gòu)造函數(shù)。
看例子:

var arr = [1,2];

console.log(arr.constructor === Array);        //true
console.log(arr.constructor === Object);    //false

但既然想要挑刺,我們就想想這種方式有什么問(wèn)題。constructor屬性其實(shí)是存在一個(gè)對(duì)象的原型中的,所以,如果他的原型被改變了,這種方法還會(huì)有用么?
還是例子:

var arr = [1,2];
arr.__proto__ = {}
console.log(arr.constructor === Array);            //false
console.log(arr.constructor === Object);        //true

哈哈,不錯(cuò)所料的,我們改變了arr的__proto__屬性為一個(gè)對(duì)象之后,constructor也給我們做出了錯(cuò)誤的判斷,所以,這種方法也有被玩壞的可能。

Object.prototype.toString()

最后就是通過(guò)toString()方法,數(shù)組原型和對(duì)象原型定義的toString()方法不同。

參考:http://www.cnblogs.com/ziyunf...

接著看例子:

var arr = [1, 2];
var obj = {
    name: "name",
}
console.log(Object.prototype.toString.call(arr) === "[object Array]"); //true
console.log(Object.prototype.toString.call(boj) === "[object Array]"); //false
后記

看到這道題還是我第一次面試的時(shí)候,比較萌新,抱的態(tài)度也是去積累點(diǎn)經(jīng)驗(yàn),準(zhǔn)備的不充分。被問(wèn)到這個(gè)題的時(shí)候,首先我的第一反應(yīng)是找一個(gè)數(shù)組中有的,對(duì)象中沒(méi)有的屬性去判斷,比如length,但說(shuō)出來(lái)我就后悔了,對(duì)象中沒(méi)有l(wèi)ength這個(gè)屬性難道我們不能給它賦一個(gè)么,而那時(shí)我還知道如果用typeof的話,他倆都會(huì)返回object。想到了構(gòu)造函數(shù)可能不一樣,但說(shuō)怎么判斷就有點(diǎn)想不出詞了,就持續(xù)懵逼中...

這篇內(nèi)容參考了《JavaScript高級(jí)程序設(shè)計(jì)》和一篇文章:http://www.cnblogs.com/Walker...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91791.html

相關(guān)文章

  • 前端面試回顧(1)---javascript的面向?qū)ο?/b>

    摘要:每個(gè)類有三部分構(gòu)成第一部分是構(gòu)造函數(shù)內(nèi),供實(shí)例對(duì)象化復(fù)制用。第二部分是構(gòu)造函數(shù)外,直接通過(guò)點(diǎn)語(yǔ)法添加,供類使用,實(shí)例化對(duì)象訪問(wèn)不到。組合繼承還有一個(gè)要注意的地方在代碼處,將子類原型的屬性指向子類的構(gòu)造函數(shù)。 前言 前一陣面試,過(guò)程中發(fā)現(xiàn)問(wèn)到一些很基礎(chǔ)的問(wèn)題時(shí)候,自己并不能很流暢的回答出來(lái)。或者遇到一些基礎(chǔ)知識(shí)的應(yīng)用,由于對(duì)這些點(diǎn)理解的不是很深入,拿著筆居然什么都寫不出來(lái),于是有了回顧一...

    animabear 評(píng)論0 收藏0
  • 我的前端面試日記(一)

    摘要:組件化編碼的一切都是基于組件的。屬性返回目標(biāo)節(jié)點(diǎn)的前一個(gè)兄弟節(jié)點(diǎn)。如果目標(biāo)節(jié)點(diǎn)前面沒(méi)有同屬于一個(gè)父節(jié)點(diǎn)的節(jié)點(diǎn),將返回屬性是一個(gè)只讀屬性。而當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為離開(kāi)環(huán)境。 第一次寫面試經(jīng)歷,雖然之前有過(guò)一些電話面試經(jīng)歷,但相對(duì)而言感覺(jué)此次的經(jīng)歷對(duì)自己收獲還是比較大,這里留下面經(jīng)當(dāng)作日記吧?。嬖嚂r(shí)間:2018-6-12 下午2:10;時(shí)長(zhǎng):50min;公司:*) 1、說(shuō)說(shuō)Rea...

    warkiz 評(píng)論0 收藏0
  • 我的前端面試日記(一)

    摘要:組件化編碼的一切都是基于組件的。屬性返回目標(biāo)節(jié)點(diǎn)的前一個(gè)兄弟節(jié)點(diǎn)。如果目標(biāo)節(jié)點(diǎn)前面沒(méi)有同屬于一個(gè)父節(jié)點(diǎn)的節(jié)點(diǎn),將返回屬性是一個(gè)只讀屬性。而當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為離開(kāi)環(huán)境。 第一次寫面試經(jīng)歷,雖然之前有過(guò)一些電話面試經(jīng)歷,但相對(duì)而言感覺(jué)此次的經(jīng)歷對(duì)自己收獲還是比較大,這里留下面經(jīng)當(dāng)作日記吧?。嬖嚂r(shí)間:2018-6-12 下午2:10;時(shí)長(zhǎng):50min;公司:*) 1、說(shuō)說(shuō)Rea...

    zhunjiee 評(píng)論0 收藏0
  • 回顧自己三次失敗的面試經(jīng)歷

    摘要:站在這個(gè)時(shí)間點(diǎn)上,我對(duì)自己之前三次失敗的面試經(jīng)歷做了一次深度回顧。關(guān)于我第三次面試失敗的經(jīng)歷,依然是與輪播圖有關(guān)。當(dāng)然,這次思特奇面試之旅,最后也是以失敗告終,這也是我離進(jìn)大廠最近的一次。 showImg(https://segmentfault.com/img/bVYQuP?w=528&h=513); 前言 時(shí)間的齒輪已經(jīng)來(lái)到了2017年的11月份,距離2018年僅僅還剩下不到兩...

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

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

0條評(píng)論

fnngj

|高級(jí)講師

TA的文章

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