eval()
eval 可以解析任何字符串变成 JS:
1 2 3
| var str = "function testFunction() {console.log('test');}" eval(str) testFunction()
|
JSON.parse()
JSON.parse 只能解析 JSON 形式的字符串变成 JS,安全性比 eval 高一些。
字符串中的属性要严格加上引号
1 2 3
| let str = '{ "name" : "hello" }' let json = JSON.parse(str) json.name
|
JSON.stringify()
JSON.stringify 将 JSON 转换成字符串:
1 2 3 4 5
| let json = { name: "hello", } let str = JSON.stringify(json) str
|
复制对象出现的问题
由于=赋值,会有引用的问题,新对象属性改变可能会影响到源对象:
1 2 3 4 5 6
| let a = { name: "hello", } let b = a b.name = "hi" a.name
|
可以用 JSON 的新方法解决:
1 2 3 4 5 6
| let a = { name: "hello", } let b = JSON.parse(JSON.stringify(a)) b.name = "ni" a.name
|
JS 历史管理
触发历史管理的方法:
Update at 2021/6/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| let room = { number: 23 } let meetup = { title: "Conference", participants: [{ name: "John" }, { name: "Alice" }], place: room, }
room.occupiedBy = meetup
console.log( JSON.stringify( meetup, (key, value) => { return key === "occupiedBy" ? undefined : value }, 2 ) )
let toJson = { age: 32, toJSON() { return this.age }, }
console.log(JSON.stringify(toJson))
|