我正在尝试通过express发送一个React组件树,我的组件数组包含了关键的$$typeof: Symbol.for('react.element')
属性。我正在使用res.send
。除了该属性之外,对象的其余部分都会通过。我被告知它可能与Symbol有关。因为不是可枚举的? JSON.stringify
也剥夺了财产。
我已将问题缩小为具有Symbol
值的属性。这反映在in the documentation for 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))
答案 0 :(得分:0)
由于该符号用作值,您可以使用自定义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)