[英]JavaScript Object literal notation confusion
在Firefox控制台中,此代碼將生成錯誤:
{"d" : ["bankaccountnumber", "$1234.56"] }
> SyntaxError: invalid label {
> message="invalid label", more...}
這段代碼工作得很好
{d : ["bankaccountnumber", "$1234.56"] }
> ["bankaccountnumber", "$1234.56"]
此代碼也可以正常工作
var a = {'d' : ["bankaccountnumber", "$1234.56"] };
a.d
> ["bankaccountnumber", "$1234.56"]
有人可以幫助解釋為什么會有差異? 謝謝!
這是因為語法含糊不清。 當你嘗試在前兩行中創建一個普通的對象文字時,JavaScript實際上將它解釋為一組大括號,然后是一個標簽,然后是一個語句:
{
d: ["bankaccountnumber", "$1234.56"]
}
此代碼不會評估對象,而只評估數組。 第一個示例,您嘗試使用字符串作為標簽,這是不正確的語法。 第三個示例正常工作,創建一個對象並將其存儲在a
。
它可能很難決定它是表達式還是塊。 如果在對象周圍使用括號,它會強制表達式。 分組運算符(
和)
強制將{
和}
解析為對象文字。
({"d" : ["bankaccountnumber", "$1234.56"] }) // works
閱讀命名函數表達式揭秘 。 它與此問題沒有直接關系,但在討論使用分組括號和eval()
時確實解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.