我正在尝试通过 Express 发送 React 组件树,我的组件数组包括关键的$$typeof: Symbol.for('react.element')
财产。我在用着res.send
。除了该属性之外,对象的其余部分都会通过。有人告诉我这可能与 Symbol.for 不可枚举有关?JSON.stringify
还剥夺财产。
我已将问题范围缩小到具有Symbol
价值观。这反映了在文档中stringify. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify。谁能解释为什么会出现这种情况或者解决方法是什么?
const obj1 = {
'stringKey': Symbol.for('String Value'),
boolKey: true,
numKey: 1
}
const obj2 = {...obj1, 'stringKey': 'Plain String'}
console.log(JSON.stringify(obj1))
console.log(JSON.stringify(obj2))
由于符号用作值,您可以使用自定义replacer
将符号格式化为字符串,您可以使用自定义在接收端恢复reviver
const obj1 = {
'stringKey': Symbol.for('String Value'),
boolKey: true,
numKey: 1
}
const obj2 = {...obj1, 'stringKey': 'Plain String'}
console.log(JSON.stringify(obj1, (name, value) => {
if(typeof value === 'symbol') {
value = `$$${Symbol.keyFor(value)}`
}
return value
}))
console.log(JSON.stringify(obj2))
天真的演示。您最好同时列出应从注册表中恢复为符号的道具。
const a = {a: Symbol.for('a')}
const str = JSON.stringify(a, (k,v) => typeof v === 'symbol' ? `$$Symbol:${Symbol.keyFor(v)}` : v)
const b = JSON.parse(str, (k,v) => {
const matches = v.match && v.match(/^\$\$Symbol:(.*)$/)
return matches ? Symbol.for(matches[1]) : v
})
console.log(a, str, b, a.a === b.a)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)