我的目标是JSON.parse
用可选参数告诉函数,如果传递给函数的字符串有一个名为执行该表达式内部操作的键,然后继续向外工作以对字符串的其余部分进行操作reviver argument
,我希望它.calc(string)
"expr"
每次我运行这个我都会得到NaN
。
如果我注释掉calc(string)
之前的最后两个调用,console.log(initNumber)
则程序按预期运行。
因此,如果键是"expr"
并且嵌套"op"
键的值是"add"
然后对该嵌套对象执行 add() 函数。如果"op"
key 是"subtract"
.
非常感谢任何帮助。
var initNum = 0;
var calc = function(string) {
var calcString = JSON.parse(string, reviver);
add(calcString);
subtract(calcString);
};
var add = function(string) {
if (string["op"] == "add") {
var numString = parseInt(JSON.stringify(string["number"]));
initNum = numString + initNum;
return initNum;
}
}
var subtract = function(string) {
if (string["op"] == "subtract") {
var numString = parseInt(JSON.stringify(string["number"]));
initNum = initNum - numString;
return initNum;
}
}
var reviver = function(key, val) {
if (key == "expr") {
if (val.op == "add") {
return add(val);
}
else if (val.op == "subtract") {
return subtract(val);
}
}
else {
return val;
}
};
calc('{"op" : "add", "number" : 5}');
calc('{"op" : "subtract", "number" : 2}');
calc('{"op" : "add", "number" : 19}');
calc('{"op": "subtract", "expr" : {"op" : "add", "number" : 15}}');
calc('{"op": "add", "expr" : {"op" : "add", "expr" : {"op" : "subtract", "number" : 3}}}');
console.log(initNum);