偶然一次,用JSON.parse()轉(zhuǎn)json字符串時報錯了...,查了資料才發(fā)現(xiàn)可以用eval()字符串轉(zhuǎn)化為數(shù)組,試了一下是可以轉(zhuǎn)。
JSON.parse()有幾個前置的使用條件:
1. 對象和數(shù)組:
屬性名稱必須用雙引號包裹;
最后一個屬性后面不能有逗號。
2.數(shù)值:
前導0不能使用(在 JSON.stringify 中將會被忽略,在 JSON.parse 會拋出錯誤);
小數(shù)點后面至少有一個數(shù)字。
3.字符串:
只有有限的字符能夠被轉(zhuǎn)義;
不允許某些控制字符;但允許使用Unicode 行分隔符 (U+2028) 和段落分隔符 (U+2029) ;
字符串必須用雙引號括起來。
以上,有時候后端傳的JSON字符串數(shù)據(jù)不規(guī)范,用JSON.parse()就會報錯;這時候可以用eval();但如果字符串中有網(wǎng)址,eval()轉(zhuǎn)的時候會直接跳轉(zhuǎn)到網(wǎng)址,這點不安全,不適合用eval(),eval()不應該去轉(zhuǎn)外部第三方數(shù)據(jù),存在安全問題
另外eval()轉(zhuǎn)對象字符串時,外層要加小括號,這是因為對象字符串是{}開始結(jié)尾的,js會誤認為代碼塊處理掉,如果不加代碼會直接報錯??!