簡體   English   中英

自動分號插入:NodeJS與瀏覽器之間的替代轉換行為?

[英]Automatic semicolon insertion: Alternate casting behavior on NodeJS vs Browser?

我注意到在使用自動分號插入和類型轉換時,NodeJS與瀏覽器的行為不同。

瀏覽器:

> {}+{}
NaN
> {}+{};
NaN
> ({}+{})
"[object Object][object Object]"
> ({}+{});
"[object Object][object Object]"

NodeJS:

> {}+{}
'[object Object][object Object]'
> {}+{};
NaN
> ({}+{})
'[object Object][object Object]'
> ({}+{});
'[object Object][object Object]'

A.為什么在有/沒有分號或括號中對轉換進行不同的解釋?

B.哪個更符合該標准? 還是在標准中未解決?

更新:我發現它僅在NodeJS中執行此不同行為。 我以前認為這是V8 vs SpiderMonkey。

我猜想您正在將此輸入不同的調試控制台。 一個調試控制台將其視為程序 ,另一調試控制台將其視為表達式


{}+{}

當解釋為程序時,它等效於

{
  // empty block
}  // No semicolon inserted because statement is a block.
(+ Number({}))  // Prefix + operator coerces its argument to a number.

當解釋為表達式時,它等效於

// Infix + operator concatenates if arguments are not both numeric
String({}) + String({});

將每個對象強制轉換為字符串,然后將這兩個字符串連接起來。


哪個口譯員更符合該標准? 還是在標准中未解決?

如果按照我的設想,如果這發生在調試控制台中,則沒有任何標准可以解決調試控制台必須執行的工作-它可以完全繞過JavaScript解釋器,並將其輸入解釋為COBOL。

如果將其傳遞給eval ,則第一個解釋必須獲勝,因為eval的參數是被解析為Program的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM