為什麼eval()處理json格式資料需要多加一個小括號

admin發表於2017-04-05

由於現階段使用json格式資料在前後臺進行資料傳輸。

關於json更多內容可以參閱json教程

下面就介紹一下為什麼eval()處理json格式資料需要多加一個小括號。

首先說明一點json格式資料是一個字串,很多人張口閉口json物件,其實這種叫法是錯誤的。

使用eval()將json格式資料轉換為javascript物件語法結構如下:

[JavaScript] 純文字檢視 複製程式碼
var jsonObject = eval("(" + jsonFormat + ")");

看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var strJSON='{"webName":"螞蟻部落","url":"softwhy.com","age":"2"}';
var jsonObj=eval("("+strJSON+")");
console.log(jsonObj.webName);

eval()會建立一個執行環境,在這個環境中,如果沒有多加一個小括號的話,就會被直接解讀為:

[JavaScript] 純文字檢視 複製程式碼
{"webName":"螞蟻部落","url":"softwhy.com","age":"2"}

這將會被javascript解析為一個標籤語句,但是它又不完全符合標籤語句的語法,所以會報錯。

關於標籤語句可以參閱javascript label標籤語句一章節。

如果加上一個小括號的話,那麼就是如下樣子:

[JavaScript] 純文字檢視 複製程式碼
({"webName":"螞蟻部落","url":"softwhy.com","age":"2"});

因為小括號這裡是一個分組運算子,這個時候{}內容就會被解讀為物件直接量,並返回這個物件直接量。

再來看一個程式碼例項加強一下理解:

[JavaScript] 純文字檢視 複製程式碼
console.log(eval("{}"));
console.log(eval("({})"));

相關文章