我想确认关于此引用的行为,以及使用齐磊功能修改对象中键(不仅是值)的功能。
如果我使用 function (键,值{...},而不是箭头功能(键,值)=> {...})来传递reviver函数,则此引用似乎是指已恢复的对象。JSON中的子对象也是如此,我在服务器上的node.js 8.x中以及在客户。
可以理解,如果我将该函数作为箭头函数传递,则会保留调用上下文。
我在解析JSON时依靠它来添加和删除一些键。
我可以依靠这种行为吗?
var aTestStr = '{"prop1": "this is prop 1",'
+'"prop2": {"prop2A": 25, "prop2B": 13, "prop2C": "This is 2-c"}'
+'}';
var aTestObj = JSON.parse(aTestStr, function(key, value) {
//at this point, this refers to the object being revived
//E.g., when key == 'prop1', this is an object with prop1 and prop2
//when key == prop2B, this is an object with prop2A, prop2B and prop2C
//So is this code reliable?
if (key == this.prop2B) {
//Do something, add a prop to this:
this.prop2BDif = 100 - this.prop2B;
}
});
答案 0 :(得分:1)
是的,记录在案:JSON.parse documentation in the MDN
如果指定了reviver,则在返回之前将转换通过解析计算的值。具体而言,计算值及其所有属性(从嵌套最多的属性开始,一直到原始值本身)都通过规则运算器运行。 然后调用它,对象包含正在按此方式处理的属性,属性名称为字符串,属性值作为参数。