首页 > 解决方案 > JSON.stringify 不在某些对象属性上运行替换函数

问题描述

我有这个特定的 JavaScript 对象:

var a = {x: Infinity, y: NaN, z: 'hello'};

当我JSON.stringify(a, r)在以下代码中使用某个替换函数(如下)在该对象上运行时,我得到了预期console.log的 s:

代码:

var a = {
  x: Infinity,
  y: NaN,
  z: 'hello'
};

var r = function(key, value) {
  console.log(value);

  if (typeof value === 'string') {
    return undefined;
  }

  return value;
};

console.log(JSON.stringify(a, r));

输出:

{x: Infinity, y: NaN, z: "hello"}
Infinity
NaN
hello
{"x":null,"y":null}

但是,当我对替换函数进行这个小修改时,JSON.stringify(a, r)似乎没有迭代任何对象的属性并返回[object Object]

var a = {
  x: Infinity,
  y: NaN,
  z: 'hello'
};

var r = function(key, value) {
  console.log(value);

  if (!isFinite(value)) {
    return value.toString();
  }

  return value;
};

console.log(JSON.stringify(a, r));

输出:

{x: Infinity, y: NaN, z: "hello"}
"[object Object]"

我试图让函数返回

{"x":"Infinity", "y":"NaN", "z":"hello"}

我究竟做错了什么?

标签: javascriptjson

解决方案


您还需要检查类型。

var a = { x: Infinity, y: NaN, z: 'hello' },
    r = function(key, value) {
        if (typeof value === 'number' && !isFinite(value)) return value.toString();
        return value;
    };

console.log(JSON.stringify(a, r));


推荐阅读