簡體   English   中英

JS中的對象文字表示法差異

[英]Object literal notation differences in JS

JavaScript處理以下兩個聲明的方式之間有區別嗎?

var foo = {
    foo : true,
    bar : 1
};

var foo2 = {
    "foo" : true,
    "bar" : 1
};

JavaScript似乎對它們相同。 如果它們確實相同,那么是否有“正確”或首選的方式來聲明呢?

兩種形式都可以“初始化”對象(也就是聲明對象文字)。

屬性標識符可以是名稱,數字或字符串,但是它們都被解釋為字符串:

var foo = {
  foo  : true,
  "bar": true,
  3    : true
};

有關更多詳細信息, 請參見ECMA-262第5版語言規范§11.1.5

請注意, PropertyName構造在第5版中可能已更改(就像許多事情一樣),因此不支持最新版本JavaScript的瀏覽器可能會實現不同版本的ECMAScript。

還要注意, JSON將對象定義為一組字符串/值對,並且字符串用引號引起來:

var fooJSON = '{"foo":true,"bar":true,"3":true}';

您的第一個樣本不是 json

{
    foo: true,
    bar: 1
}

在此處輸入圖片說明

因此,您的第二個代碼( jsonlint )是json。

 {
    "foo": true,
    "bar": 1
}

關於您的實際問題,它們都是相同的。

關於評論:

如果它們相同,但是如果第一個示例不是json,但是第二個示例是json,則有什么區別?

假設我有一個應該(但不是)表示json字符串表示形式的字符串:

此字符串來自服務器:

" {foo: true,bar: 1}"

現在我要解析它。

跑步

JSON.parse(" {foo: true,bar: 1}")

將失敗 :

語法錯誤:意外的令牌f

但是:

JSON.parse("{\\"foo\\": true,\\"bar\\": 1}")

會做的很好

Object {foo: true, bar: 1}

所以這是一個差異(一個差異示例)。

說到JS如何查看/處理兩個對象( Objects !!!,我沒有說json cuz,第一個不是json)-它們是相同的。

PS,另一個有用的功能是,即使您未使用"myProp" ,也可以將道具視為字符串:

例如:

var a={myProp:1};  //notice no `"`
var b="myProp"; 
 a[b]=2; 
alert(a.myProp) //2

暫無
暫無

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

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