在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js中的[object, Object]

js中的[object, Object]

今天照著敲一段代碼,但是自己寫的時(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()

2017年12月22日 07:09
編輯回答
醉淸風(fēng)

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

2018年6月18日 16:52
編輯回答
墨小羽

這兩個(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()就好了

2018年1月13日 22:59