今天照著敲一段代碼,但是自己寫的時(shí)候出現(xiàn)了一個(gè)錯(cuò)誤:
Object.prototype.toString.call(prop) === '[object Object]' //書上的代碼
我自己寫的時(shí)候,把'[object Object]'寫成了'[Object Object]' //兩個(gè)object都大寫了
這兩個(gè)object代表什么呢?
關(guān)于toString()的,這個(gè)方法在Objet的原型上,而prop是一個(gè)對(duì)象,還要用call(),我為什么不直接prop.toString()這樣寫呢?
另外:
{}.toString() //報(bào)錯(cuò)
var obj = {};
obj.toString(); //"[object Object]"
為什么會(huì)這樣呢?
這兩個(gè)object代表什么呢?
object是告訴你基礎(chǔ)類型是object,但是object包含了很多子類型比如Array/Boolean,而第二個(gè)Object則告訴你屬于什么子類型。
我為什么不直接prop.toString()這樣寫呢?
因?yàn)?code>prop是個(gè)不確定的東西,是一個(gè)參數(shù),有可能是基礎(chǔ)類型,也就沒有toString,所以用Object.prototype.toString.call避免報(bào)錯(cuò)。
{}.toString() //報(bào)錯(cuò)
{}.toString()報(bào)錯(cuò)是因?yàn)?code>{}被解析成代碼塊,你應(yīng)該改成({}).toString()
https://developer.mozilla.org...
https://tc39.github.io/ecma26...
(19.1.3.6)
Object.prototype.toString的表現(xiàn)是標(biāo)準(zhǔn)規(guī)定的
根據(jù)標(biāo)準(zhǔn)你可以自定義后面那個(gè)Object
function Foo(){}
Foo.prototype[Symbol.toStringTag]='Foo'
Object.prototype.toString.call(new Foo)// "[object Foo]"
var Bar={[Symbol.toStringTag]:'Bar'}
Object.prototype.toString.call(Bar)// "[object Bar]"
{}.toString()
這個(gè)報(bào)錯(cuò)是因?yàn)閧}被認(rèn)為是代碼塊而不是object
這兩個(gè)object代表什么呢?
默認(rèn)情況下,toString()方法被每個(gè)Object對(duì)象繼承。如果此方法在自定義對(duì)象中未被覆蓋,toString() 返回 "[object type]",其中type是對(duì)象的類型。
我為什么不直接prop.toString()這樣寫呢?
這個(gè)代碼Object.prototype.toString.call(prop)是為了做類型判斷的,不管prop是什么類型,返回肯定是"[object type]",但是prop不一定是Object,返回的不一定是類型,比如1.toString() 會(huì)報(bào)錯(cuò),'aaa'.toString()返回的是'aaa'
{}.toString() //報(bào)錯(cuò)
是語法錯(cuò)誤,大括號(hào)開頭的js引擎會(huì)認(rèn)為是代碼塊,所以會(huì)報(bào)錯(cuò)。改成({}).toString()就好了
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。