補充記錄一下,有些方法很須要熟練記憶的javascript
JSON對象對值有嚴格的規定java
複合類型的值只能是數組或對象,不能是函數、正則表達式對象、日期對象。
原始類型的值只有四種:字符串、數值(必須以十進制表示)、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)。
字符串必須使用雙引號表示,不能使用單引號。
對象的鍵名必須放在雙引號裏面。
數組或對象最後一個成員的後面,不能加逗號。
我對這段話的理解是:正則表達式
該方法用來將參數值轉化爲JSON字符串數組
JSON.stringify("javascript"); //"javascript"
參數類型爲number函數
console.log(JSON.stringify(1)); // 1 console.log(JSON.stringify(0XFFF)); //4095 console.log(JSON.stringify(Infinity)); //null console.log(JSON.stringify(NaN)); //null
參數類型boolprototype
console.log(JSON.stringify(false)); //false console.log(JSON.stringify(true)); //true
JSON.stringify("null"); //null
參數類型數組code
JSON.stringify([1,null,NaN,undefined,function () {},(new Date()),,]); // [1,null,null,null, null, "2018-11-02T15:22:53.482Z", null]
注意空位會返回nullxml
參數類型對象對象
console.log(JSON.stringify({"a":1,"b":undefined})); //{"a":1} 忽略undefined鍵值 console.log(JSON.stringify({"a":null,"b":NaN})); //{"a":null,"b":null} NaN與Infinity返回null console.log(JSON.stringify({"a":function () {},"b":(new Date())})); //{"b":"2018-11-02T15:27:13.886Z"} 忽略undefined鍵值
當對象中有不可遍歷屬性時,跳過該屬性ip
它的第二個參數可填入數組或者函數
參數爲數組時,僅適用於第一個參數爲對象時纔有效;其對象包括數組
起到過濾的效果,留咱們本身想要的鍵值對
console.log(JSON.stringify({a : 1, b : 2}, ["b"])); //{b : 2}
參數爲函數:
JSON.stringify({ a: 1, b: [1, 2] }, (key, value) => { console.log(key + ":" + value); return value; }); /* :[object Object] a:1 b:1,2 0:1 1:2 */
由例子能夠看出,一共執行了5次
第一次執行將參數總體做爲value,key爲空;
剩餘每次都按更加value的值進行下一次執行;
若value爲對象,會執行完對象中的第一個成員,再去執行第二個成員,直到沒有value
返回值,我認爲它是經過value把參數遍歷一遍,將value填入相應位置,將其返回
JSON.stringify()正是調用了toJSON方法;因此對其進行改造能夠改變輸出
例如當參數爲正則時,會返回空對象
JSON.stringify(/aa/) // {} RegExp.prototype.toJSON = RegExp.prototype.toString; JSON.stringify(/aa/) // "/aa/"
該方法則是將JSON.stringify()生成的結果還原
JSON.parse(JSON.stringify("123")); //123 JSON.parse(JSON.stringify(undefined)); //報錯不是JSON對象