使用eval()將json字串轉換為物件要多加一個小括號

admin發表於2017-04-15

下面介紹一下為什麼使用eval()函式將json格式字串轉換為物件的時候,需要多巢狀一層小括號,下面就介紹一下它的原因,希望能夠對需要的朋友帶來幫助。

先看一段轉換程式碼:

[JavaScript] 純文字檢視 複製程式碼
var jsonStr='{"webName":"螞蟻部落","webAddress":"青島市南區","age":2}';
var jsonObject=eval("("+jsonStr+")");
console.log(jsonObject.webName);

以上程式碼可以將一個json格式字串轉換成物件,下面就介紹一下為何要巢狀一個效果括號。

如果不加小括號的話,字串將被eval()函式處理為:

[JavaScript] 純文字檢視 複製程式碼
{"webName":"螞蟻部落","webAddress":"青島市南區","age":2}

在js中,如果一段程式碼既可以認為是表示式也可以認為是語句,那麼語句優先,所以上面就是一個語句,那麼"webName":"螞蟻部落"就是標籤語句,但是逗號運算子後面也是一個標籤語句就不對了,因為運算子後面要跟著表示式才可以。如果外面套上一層小括號,那麼程式碼就會被eval()處理成:

[JavaScript] 純文字檢視 複製程式碼
({"webName":"螞蟻部落","webAddress":"青島市南區","age":2})

因為小括號之中必須是表示式,那麼裡面的內容就成了一個物件直接量表示式,也就是轉換成功了。

相關文章