We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JSON全称 JavaScript Object Notation
parse
stringify
JSON
ECMA-404 中定义了JSON数据交换格式。
JSON格式使用与ECMAScript字面量,数组初始化器和对象初始化器相似的语法表示字面量,数组和对象。解析后,JSON对象被实现为ECMAScript对象。JSON数组被实现为ECMAScript数组。JSON字符串,数字,布尔和 null 被实现为ECMAScript的字符串,数字,布尔和 null
null
参数 reviver 可选,它是个接收参数 key 和 value 的函数。
String
Number
Boolean
Null
Object
返回UTF-16编码JSON格式的字符串或 undefined。
undefined
true
该函数即 %JSONStringify% 固有对象。
开发中经常图省事直接用 JSON.parse(JSON.stringify(目标)) 来进行深拷贝。一般都是懒,不想引入第三方工具类库,又不想自己写,但是用这个需要牢记有以下坑点:
JSON.parse(JSON.stringify(目标))
// 1. 参数不能是 undefined JSON.parse(JSON.stringify(undefined)) // 报错 // 2. 参数不能是 BigInt 类型 JSON.parse(JSON.stringify(1n)) // 报错 // 3. 参数不能是 Symbol 类型 JSON.parse(JSON.stringify(Symbol())) // 报错 // 4. 参数不能是 Function JSON.parse(JSON.stringify(() => {})) // 报错 // 5. NaN JSON.parse(JSON.stringify(NaN)) // null // 6. Infinity JSON.parse(JSON.stringify(Infinity)) // null // 7. -Infinity JSON.parse(JSON.stringify(-Infinity)) // null // 8. Date typeof (JSON.parse(JSON.stringify(new Date))) // string typeof (new Date) // object // 9. 不要有循环引用,对所有深拷贝来说,循环引用都是非常不好的
能使用该方法进行深拷贝的只能是 Null,String,Boolean,普通Number数字,普通Object 以及 Array。如果你确定业务中的参数类型只在这些范围内,那你用吧,否则乖乖用 lodash 等第三方库进行深拷贝,当然,手写更好了
Array
早上逛知乎发现个有意思的问题:https://www.zhihu.com/question/408223837/answer/1352766043
我立马想到的是 JSON.parse
JSON.parse
JSON.parse("[ {a:1 , d:3} , {b:2} , {c:3} ]") // 报错
报错是由于该字符串内的 {a:1 , d:3} 以及 {b:2} 和 {c:3} 并不是符合规范的 JSON 对象(键名缺少双引号)。这就有点麻烦了。不过提问者也给出了解决方法,利用 String.prototype.replace 来替换下,这需要对该API非常熟悉的人才能想到,我还不行。这个正则我不会写。。。
{a:1 , d:3} 以及 {b:2} 和 {c:3}
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JSON 对象
JSON全称 JavaScript Object Notation
parse
和stringify
,用于解析和构造JSON
文本。ECMA-404 中定义了JSON数据交换格式。
JSON.parse ( text [ , reviver ] )
JSON格式使用与ECMAScript字面量,数组初始化器和对象初始化器相似的语法表示字面量,数组和对象。解析后,JSON对象被实现为ECMAScript对象。JSON数组被实现为ECMAScript数组。JSON字符串,数字,布尔和
null
被实现为ECMAScript的字符串,数字,布尔和null
参数 reviver 可选,它是个接收参数 key 和 value 的函数。
String
,Number
,Boolean
,Null
,要么是由 数组字面量 或 对象字面量 定义的Object
JSON.stringify ( value [ , replacer [ , space ] ] )
返回UTF-16编码JSON格式的字符串或
undefined
。undefined
true
,undefined
String
,将 item 设置为 vNumber
,将 item 设置为 ! ToString(v)Object
,undefined
且 item 也不在 PropertyList 中,Object
,Number
,String
值。String
,String
值。该函数即 %JSONStringify% 固有对象。
关于深拷贝
开发中经常图省事直接用
JSON.parse(JSON.stringify(目标))
来进行深拷贝。一般都是懒,不想引入第三方工具类库,又不想自己写,但是用这个需要牢记有以下坑点:能使用该方法进行深拷贝的只能是
Null
,String
,Boolean
,普通Number
数字,普通Object
以及Array
。如果你确定业务中的参数类型只在这些范围内,那你用吧,否则乖乖用 lodash 等第三方库进行深拷贝,当然,手写更好了2020-07-22 补充
早上逛知乎发现个有意思的问题:https://www.zhihu.com/question/408223837/answer/1352766043
我立马想到的是
JSON.parse
报错是由于该字符串内的
{a:1 , d:3} 以及 {b:2} 和 {c:3}
并不是符合规范的 JSON 对象(键名缺少双引号)。这就有点麻烦了。不过提问者也给出了解决方法,利用 String.prototype.replace 来替换下,这需要对该API非常熟悉的人才能想到,我还不行。这个正则我不会写。。。The text was updated successfully, but these errors were encountered: