js字符串轉(zhuǎn)換為對(duì)象格式的三種方法總結(jié)
背景:
js字符串轉(zhuǎn)換為對(duì)象格式,一般都會(huì)想到JSON.parse(),但數(shù)據(jù)不是標(biāo)準(zhǔn)的 JSON 格式的時(shí)候會(huì)解析出錯(cuò),這時(shí)候就可以使用eval() 函數(shù)、new Function()方法來(lái)轉(zhuǎn)換。
常用3種將字符串string轉(zhuǎn)為json對(duì)象 方法:
var str = '{"name":"小明","age":18}'; var json = JSON.parse(str);//第一種 var json2 = eval("(" + str + ")");//第二種 var json3 = (new Function("return " + str))();//第三種
打印效果:
詳細(xì)說(shuō)明:
JSON.parse()
語(yǔ)法:
JSON.parse(text[, reviver]); //text:必需, 一個(gè)有效的 JSON 字符串。 //reviver: 可選,一個(gè)轉(zhuǎn)換結(jié)果的函數(shù), 將為對(duì)象的每個(gè)成員調(diào)用此函數(shù)。
解析前要確保你的數(shù)據(jù)是標(biāo)準(zhǔn)的 JSON 格式,否則會(huì)解析出錯(cuò)。
情況一:有的人可能會(huì)習(xí)慣寫成對(duì)象形式的字符串,如:str = '{name:"小明",age:18}'; 結(jié)果使用JSON.parse()來(lái)轉(zhuǎn)化會(huì)報(bào)錯(cuò),因?yàn)槭褂肑SON.parse需嚴(yán)格遵守JSON規(guī)范。
情況二:JSON.parse使用單引號(hào)來(lái)套雙引號(hào),如果反過(guò)來(lái)寫呢,如:var str = "{'name':'小明', 'age':18}";(相信也不少人習(xí)慣用雙引號(hào)套單引號(hào)) 結(jié)果使用JSON.parse()來(lái)轉(zhuǎn)化也會(huì)報(bào)錯(cuò)
eval() 函數(shù)
定義和用法:
eval() 函數(shù)計(jì)算 JavaScript 字符串,并把它作為腳本代碼來(lái)執(zhí)行。
如果參數(shù)是一個(gè)表達(dá)式,eval() 函數(shù)將執(zhí)行表達(dá)式。如果參數(shù)是Javascript語(yǔ)句,eval()將執(zhí)行 Javascript 語(yǔ)句。
語(yǔ)法:
eval(string)
參數(shù)描述string必需。要計(jì)算的字符串,其中含有要計(jì)算的 JavaScript 表達(dá)式或要執(zhí)行的語(yǔ)句。
eval()的返回值
eval()的返回值遵循以下規(guī)則:
1.如果eval()的參數(shù)不是字符串,那么eval()將直接返回參數(shù)。
2.如果eval()的參數(shù)是字符串,那么eval()將這個(gè)字符串解析成代碼后進(jìn)行執(zhí)行,并返回最后一行代碼執(zhí)行的結(jié)果。
3.如果字符串無(wú)法解析成合法的代碼,eval()將拋出SyntaxError錯(cuò)誤
new Function()
這個(gè)特殊的new Function表面看起來(lái)很奇怪,但在實(shí)踐中顯得非常有用。
語(yǔ)法:
let func = new Function(arg1, arg2, ..., body);
歷史原因,參數(shù)也可以以逗號(hào)分隔的列表的形式給出。
這三個(gè)意思相同:
new Function('a', 'b', 'return a + b'); // 基礎(chǔ)語(yǔ)法 new Function('a,b', 'return a + b'); // 逗號(hào)分隔 new Function('a , b', 'return a + b'); // 逗號(hào)加空格分隔
使用new Function創(chuàng)建的函數(shù),其[[Environment]]引用全局詞法環(huán)境,而不是包含該函數(shù)的外部詞法環(huán)境。因此,他們不能使用外層的變量。但這確實(shí)很好,因?yàn)樗梢允刮覀兠庥阱e(cuò)誤。明確地傳遞參數(shù)在架構(gòu)上是一種更好的方法,并且不會(huì)在使用minifiers時(shí)不會(huì)產(chǎn)生問(wèn)題。
總結(jié)
到此這篇關(guān)于js字符串轉(zhuǎn)換為對(duì)象格式的三種方法總結(jié)的文章就介紹到這了,更多相關(guān)js字符串轉(zhuǎn)換對(duì)象格式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)表格響應(yīng)式布局技巧
這篇文章主要為大家介紹了JS實(shí)現(xiàn)表格響應(yīng)式布局技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07JSP跨iframe如何傳遞參數(shù)實(shí)現(xiàn)代碼
表單與操作頁(yè)面分離,按鈕按下,click 或者onclick事件觸發(fā),傳遞一個(gè)唯一性的參數(shù)至子頁(yè)面JSP,感興趣的朋友可以了解下2013-09-09JavaScript時(shí)間對(duì)象Date內(nèi)置構(gòu)造函數(shù)操作實(shí)例
這篇文章主要為大家介紹了JavaScript時(shí)間對(duì)象Date內(nèi)置構(gòu)造函數(shù)操作實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05微信小程序授權(quán)登錄解決方案的代碼實(shí)例(含未通過(guò)授權(quán)解決方案)
這篇文章主要介紹了微信小程序授權(quán)登錄解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Typescript tipe freshness 更嚴(yán)格對(duì)象字面量檢查
這篇文章主要為大家介紹了Typescript tipe freshness 更嚴(yán)格對(duì)象字面量檢查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10fw.qq.com/ipaddress已失效 javascript獲得客戶端IP的新方法
一直以來(lái),我都是通過(guò)http://fw.qq.com/ipaddress來(lái)獲得客戶端用戶的IP,這個(gè)方法簡(jiǎn)單、快速、實(shí)用2012-01-01