學習es6里解構賦值的時候JSON應用的時候遇到Unexpected token o in JSON at position 1 這個錯誤
const json = {"name1":"es","price":"200"}
const {name1,price} = JSON.parse(json)
console.log(name1,price)
發現json不是一個字符串,導致報錯。JSON.parse(里面必須是一個json字符串)
正確的寫法是,如下:
const json = '{"name1":"es","price":"200"}'
const {name1,price} = JSON.parse(json)
console.log(name1,price)
到這里就解決了問題!
結束的時候普及一下JSON.parse()和JSON.stringify()方面的知識:
JSON.parse() 方法用於將一個 JSON 字符串轉換為對象,如:
const str = '{"name1":"es","price":"200"}'
JSON.parse(str);
//結果為一個Object
//{name1: 'es', price: '200'}
JSON.stringify() 方法是將一個JavaScript值(對象或者數組)轉換為一個 JSON字符串,如:
const a = {a:1,b:2};
JSON.stringify(a);
//結果為 '{"a":1,"b":2}'
學習到新的知識,就做個記錄吧!
一. JSON.stringify()的幾種妙用
1.判斷數組是否包含某對象,或者判斷對象是否相等
//判斷數組是否包含某對象
let data = [
{name:'javascript'},
{name:'vue'},
{name:'React'},
],
val = {name:'React'};
JSON.stringify(data).indexOf(JSON.stringify(val) !== -1; // true
//判斷兩數組/對象是否相等
let a = [1,2,3],
b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b);//true
2.實現對象深拷貝
如果怕影響原數據,我們常深拷貝出一份數據做任意操作,其實使用JSON.stringify()與JSON.parse()來實現深拷貝是很不錯的選擇
//深拷貝
function deepClone(data) {
let _data = JSON.stringify(data),
dataClone = JSON.parse(_data);
return dataClone;
};
//測試
let arr = [1,2,3],
_arr = deepClone(arr);
arr[0] = 2;
console.log(arr,_arr)//[2,2,3] [1,2,3]
3.JSON.stringify()與toString()的區別
這兩者雖然都可以將目標值轉為字符串,但本質上還是有區別的
let arr = [1,2,3];
JSON.stringify(arr);//'[1,2,3]'
arr.toString();//1,2,3