Я использую второй параметр JSON.parse () для изменения результата, но я не совсем понимаю, каков порядок параметра функции и как он работает
Я прочитал документ об использовании функции reviver (например, https://www.ecma -international.org / ecma-262 / 6.0 / # sec-json.parse и https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).
Из того, что я понимаю, эта функция будет работать с объектом, и первый параметр - это имя ключа или свойства, вторая функция - значение или значение свойства. То, что я не понимаю, это возвращаемое значение функции.
Вот как это делается в примере
var obj1 = '{"a":1, "b":42}';
let text = JSON.parse(obj1, (key, value) => {
if (typeof value === 'number'){
return value * 2
}
else{
return value
}
}
)
console.log(text) // {"a": 2, "b": 84}
Это хорошо работает. Но когда я пытаюсь изменить код, так как я знаю, все значение уже число
var obj1 = '{"a":1, "b":42}';
let text = JSON.parse(obj1, (key, value) =>{
return value * 2
})
console.log(text) // NaN
Мне странно, почему, когда я удаляю return value
, это не работает. Я имею в виду, что с помощью функции ни одно из значений не возвращает неопределенное значение, когда я value*2
. Я тогда попробую другой тест
var obj1 = '{"a":1, "b":42}';
let text = JSON.parse(obj1, (key, value) => {
if (typeof value === 'number'){
console.log('This is in if',key, value)
return value * 2
}
else{
console.log('This is in else', key, value)
return value
}
}
)
console.log(text)
Другая странная вещь возникает, когда код в операторе else
выполняется, даже если предполагается, что он не выполняется, потому что условие неверно. И когда он запускается, он даже распечатывает объект obj1
, который я не включил в оператор.