Javascript JSON.stringify 替换器返回值问题?

1 javascript json

我尝试编写一些 javascript 代码,将其与每个人的工资数字相乘,并使用 JSON.stringify 将它们转换为字符串。

例如,在salaries中,姓名和原始工资如下所示:

let salaries = {
        james:100000,
        john:200000,
        jane:300000
    };
Run Code Online (Sandbox Code Playgroud)

我想这样表达:{james:110000,john:220000,jane:330000}

所以,我写了这样的代码......

let payjson = JSON.stringify(pays, function replacer(key, value){
        return value*1.1;
    }); // 1st try
Run Code Online (Sandbox Code Playgroud)

并出现错误,值被更改为 [object Object]、NaN。

然而,这段代码只对我有用

let payjson = JSON.stringify(pays, function replacer(key, value){
        return Number.isInteger(value)? Math.floor(value*1.1): value;
    }); // 2nd try
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第一个没有按照我想要的方式工作,而第二个却按照我想要的方式工作。

Ana*_*ran 5

正如 stringify() 函数文档清楚地解释的那样,替换函数最初传递对象,然后传递每个属性。所以,您正在看到这种行为。第一次当值作为object类型传入并尝试进行乘法时,它会崩溃并且随后不会传递属性,因此 stringify() 的总体返回为 null。在第二次尝试代码中,您正在检查value且仅当它是 时numeric type,您才进行数学计算并返回计算值,该值用于stringify()附加到输出字符串。

查看文档,主要是这一段:

最初,使用空字符串作为表示正在字符串化的对象的键来调用替换函数。然后为要字符串化的对象或数组上的每个属性调用它。