Js中JSON.stringify()與JSON.parse()與eval()詳解及使用案例
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。因為采用獨立於語言的文本格式,也使用了類似於C語言家族的習慣,擁有了這些特性使使JSON稱為理想的數據交換語言,作用是易於閱讀和編寫,同時也易於機器解析和生成(一般用於網絡傳輸速率)。
一:JSON.parse();
作用:將json字符串轉換成json對象
語法:JSON. parse(text[,reviver])。
參數:
text:必選,一個有效的json字符串。
reviver:可選。
返回值:一個對象或者數組。
<script type="text/javascript"> varjsonStr = ‘{"name":"huangxiaojian","age":"23"}‘; var jsonObj = JSON.parse(jsonStr); console.log(jsonObj); //{name: "huangxiaojian", age: "23"} </script>
二:JSON.stringify();
作用:將json對象轉換成json字符串。
語法:JSON.stringify(value [, replacer] [, space]) 。
參數:
value:必選,通常為對象或者數組。
replacer:可選,用於轉換結果的函數或者數組。
space:可選,向返回值 JSON 文本添加縮進、空格和換行符以使其更易於讀取。
返回值:一個包含json文本的字符串。
<script type="text/javascript"> var jsonObj = {"name":"張三","age":"23歲"}; var jsonStr = JSON.stringify(jsonObj); console.log(jsonStr); //{"name":"張三","age":"23歲"} </script>
三:eval();
作用:eval()函數可計算某個字符串,並執行其中的javascript表達式或要執行的語句。
語法:eval(string)。
參數: string 必須,需要計算的字符串,其中含有要計算的javascript表達式或要執行的語句。
返回值:返回計算string的值,沒有的話不做任何改變返回。
<script type="text/javascript"> eval(‘x = 10; y = 5; console.log(x*y)‘); console.log(eval(‘5+5‘)); var x = 10; console.log(eval(‘x + 5‘)); </script>
使用eval()函數也可以將JSON字符串解析為對象,這個功能能完成JSON.parse()的功能,但是有不一樣的地方,請看下面代碼 :
<script type="text/javascript"> var str = ‘{"name":"huangxiaojian","age":"23"}‘; var info = JSON.parse(str); console.log(info); // Object {name: "huangxiaojian", age: "23"} var info = eval(‘(‘ + str + ‘)‘); console.log(info); // Object {name: "huangxiaojian", age: "23"} </script>
大家註意到eval()還要用一對圓括號將字符串包起來,對此我尋找到比較好的解釋就是:
原因:歸結於eval本身的問題,由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。
解決方法:加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那麽eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那麽{}將會被認為是執行了一句空語句。請看下列例子的不同:
<script type="text/javascript"> console.log(eval("{}")); // undefined console.log(eval("(" + "{}" + ")")); // Object {} </script>
Js中JSON.stringify()與JSON.parse()與eval()詳解及使用案例