eval() JSON轉換 小括號 () 作用

admin發表於2018-09-07

首先簡單回顧一下eval方法的作用,它可以將其引數作為一段JavaScript程式碼執行。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log(eval('1+1'));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/12/140801h5cgsi79dkx7hz79.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼將字串作為一段JavaScript程式碼執行,進行的是算術加運算。

再來看一段程式碼例項,我們要將JSON轉換成物件:

[JavaScript] 純文字檢視 複製程式碼
let jsonStr='{"webName":"螞蟻部落","age":5}';
let antzone=eval(jsonStr);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/12/140837hsn0ll0w2r2zn2ff.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼沒有達成預期效果,報錯了,程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let jsonStr='{"webName":"螞蟻部落","age":5}';
let antzone=eval("("+jsonStr+")");
console.log(antzone.webName)

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/12/140923r49kstnn8dzknc7c.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼可以順暢的執行,並列印出對應的屬性值。

唯一的區別就是在JSON外面又巢狀的一層小括號,程式碼分析如下:

(1).如果不加小括號,那麼大括號會被當做一個語句,但內容不符合JavaScript任何一種語法結構規範()

(2).小括號是一個分組運算子,小括號的內容會被當做一個表示式進行計算,而不是語句。

(3).於是小括號裡面大括號和其內容被解讀為一個物件直接量。

相關文章