鍍金池/ 問答/HTML/ 在瀏覽器環(huán)境中,{}.toString()為何不能正確運(yùn)行

在瀏覽器環(huán)境中,{}.toString()為何不能正確運(yùn)行

嘗試一下常用數(shù)值直接調(diào)用toString()方法,發(fā)現(xiàn) null undefined {} 直接調(diào)用該方法會(huì)報(bào)錯(cuò)。
圖片描述
前面2個(gè)能理解,但是{}.toString()為何不能直接使用,需要顯示轉(zhuǎn)換為對(duì)象來調(diào)用該方法,比如({}).toString()。
此時(shí)的顯示結(jié)果是"[object Object]"。
主要想知道:
1.處在賦值操作右側(cè)時(shí)的{},比如 var a = {};是一個(gè)什么樣的東西。
2.{} 與 [] 在創(chuàng)建時(shí)的區(qū)別,[]在申明時(shí)已經(jīng)完成了對(duì)象創(chuàng)建操作。[].toString() 可以正常輸出內(nèi)容,證明此時(shí)的 [] 已經(jīng)是一個(gè)完整的對(duì)象。
多謝各位大神幫忙解惑。

回答
編輯回答
帥到炸
  1. {} 這這個(gè)叫對(duì)象字面量(object literal) 等價(jià)于 new Object()
  2. []數(shù)組字面量(array literal),和 {} 類似。
  3. 之所以 {}.toString 報(bào)錯(cuò),是因?yàn)橐粚?duì)花括弧在 js 中還有代碼塊的意義,所以瀏覽器斷句和你預(yù)期不一樣,瀏覽器理解的是: {} 一個(gè)空代碼塊啦啦啦,.toString 什么玩意兒,報(bào)錯(cuò)!。加括號(hào)是為了消歧義。
2017年8月1日 19:22
編輯回答
傲嬌范

貌似在《你不知道的JS》里看到過,憑印象轉(zhuǎn)述一下:
{在最左側(cè)時(shí),瀏覽器理解為代碼塊,如if(){} 這個(gè){}包裹的代碼塊.
比如
clipboard.png
結(jié)果就不一樣。
[] + {} 是 []轉(zhuǎn)為'', {}轉(zhuǎn)為"[object Object]",
{} + [] 是 {}作為空代碼塊, []轉(zhuǎn)為0

var a = {};{}這時(shí)是一個(gè)空對(duì)象

2017年6月7日 14:46