javascript eval函數解析json資料時為什麼 加上圓括弧。
為什麼要 eval這裡要添加 “("("+data+")");//”呢。
原因在於:eval本身的問題。 由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種運算式。
加上圓括弧的目的是迫使eval函數在處理JavaScript代碼的時候強制將括弧內的運算式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括弧,那麼eval會將大括弧識別為JavaScript代碼塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句。
****************************************************************************************************************************************************************************************
《javascript 進階程式設計 第二版》page73,第五章,參考型別
5.1object類型
到目前為止,我們看到的大多數參考型別值都是object類型的執行個體;而且,object也是ECMAScript中使用最多的一個類型。雖然object的執行個體不具備多少功能,但對於在應用程式中儲存和傳輸資料而言,它們確實是非常理想的選擇。
建立object執行個體的方式有兩種。第一種是使用new操作符後跟object建構函式,如下所示:
var person=new object();
person.name="Nicholas";
person.age=29;
另一種方式是使用對象字面量標記法。對象字面量是對象定義的一種簡寫形式,目的在於簡化建立包含大量屬性的對象的過程。下面這個例子就使用了對象字面量文法定義了與前面那個例子中相同的person對象:
var person={
name:"Nicholas",
age:29
};
在這個例子中,左邊的花括弧({)表示對象字面量的開始,因為它出現在了賦值操作符的後面(在其他環境中,左花括弧表示的是語句塊的開始)。然後,我們定義了name屬性,之後是一個冒號,再後面是這個屬性的值。在對象字面量中,使用逗號來分隔不同的屬性,因此“Nicholas”後面是一個逗號。但是,在age屬性的值29的後面不能添加逗號,因為age是這個對象的最後一個屬性。在最後一個屬性後面添加逗號,會在IE及Opera中導致錯誤。
在使用對象字面量文法時,屬性名稱也可以使用字串,如下面這個例子所示:
var person={
"name":"Nicholas",
"age":29
};
以上代碼也會得到與前面例子相同的結果;建立一個帶有name和age屬性的新對象。
另外,使用對象字面量文法時,如果留空其花括弧,則可以定義只包含預設屬性和方法的對象,