亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么時候JS將{}解釋為空塊而不是空對象?

什么時候JS將{}解釋為空塊而不是空對象?

夢里花落0921 2019-08-19 17:36:24
什么時候JS將{}解釋為空塊而不是空對象?我正在閱讀這個問題的答案(關于“wat”視頻),它說:{}+[]這被解釋為一個空的代碼塊,一元加和空數組。第一部分什么都不做,數組轉換為逗號分隔的字符串(空數組為空數組),然后轉換為數字(空字符串轉換為0),因此為0。我目前正在從“權威指南”學習JS,所以我試著真正理解這樣的事情。我的問題是,JS何時決定將其解釋{}為空代碼塊,而不是空對象?另外,我想了解Node.js和Firebug之間的一些不一致之處。螢火蟲:Node.js的:
查看完整描述

2 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

我們來看看語言語法吧?第12節,聲明

Statement :
    Block
    VariableStatement
    EmptyStatement
    ExpressionStatement
    ...lots of other stuff...

這是一種非常奇特的方式,可以說語句可以是塊,變量語句,空語句,表達式語句或許多其他東西。請注意,第一個選項是“Block”:

Block :
    { StatementList(opt) }StatementList :
    Statement
    StatementList Statement

再一次,這是一種奇特的方式,說一個塊是一個{,可選地后跟一堆語句,然后是一個}

這就是你在你的例子中看到的:在JavaScript解析器認為你擁有的東西可能是一個對象文字(在某個地方被定義ExpressionStatement,第四個是'Statement'可能是)之前,它首先認為你有一個'Block ”。

編輯:如果需要,您可以在JavaScript引擎的源代碼中看到它:

關于你的第二個問題,關于這個問題已經詳細介紹??偨Y一句話:Node.js將您的輸入視為表達式(因此它不能是“阻止”),而Firebug / Chrome開發工具將其視為“語句”。


查看完整回答
反對 回復 2019-08-19
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

當新語句中的第一個標記為{,則將{}其解釋為空塊。

(實際上當然{出現在類似ifor 之類的header子句之后while,那么它{}也是一個空塊,但那不是有趣的情況。)

因此,在任何其他上下文中,比如說一個函數的參數:

foo({});

{}被解釋為一個空對象文字。

這種情況類似于function關鍵字在語句中的第一件事時被區別對待的方式。語法有歧義,解析器用固定規則解決問題。


查看完整回答
反對 回復 2019-08-19
  • 2 回答
  • 0 關注
  • 873 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號