eval()進行json轉換時新增小括號()的作用

admin發表於2018-09-07
大家知道使用eval方法可以將JSON格式字串轉換為物件直接量。

先看一段轉換JSON字串的程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var obj=eval('({"webName":"antzone","age":2,"address":"青島市南區"})');
console.log(obj.webName);

由上面程式碼的執行結果可以看出,轉換獲得了成功,也可以看到,在JSON格式字串外面又巢狀了一層小括號。

下面就來介紹這層小括號的作用,需要的朋友可以做一下參考。

eval方法會建立一個執行環境,如果沒有加小括號:

[JavaScript] 純文字檢視 複製程式碼
{"webName":"antzone","age":2,"address":"青島市南區"}

被解釋成複合語句(大括號用來構建複合語句),"webName":和後面的內容也無法組成標籤語句,直接報錯。

即便不是標準的JSON字串,程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
{webName:"antzone",age:2,address:"青島市南區"}

webName:和後面的內容構成標籤語句,"antzone"是字串字面量,age就是一個變數,但是跟冒號就會報錯。

如果外面巢狀一個小括號(分組運算子),那麼{"webName":"antzone","age":2,"address":"青島市南區"}是一個表示式,這時會被解讀為一個物件直接量,就不會有任何問題了。

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

相關文章