2013-07-08 97 views
7

在Javascript中的JSON.stringify()功能,我偶尔会看到下面的语法:第二个参数在JavaScript

JSON.stringify(obj, null, 4) 

但是,我不能得到什么的第二个参数,null,是应该做的。只要我知道,上面的函数将一个对象作为第一个参数,并将其转换为一个字符串变量。第三个参数4在这种情况下,indents和pretty-print将生成结果字符串对象。但是,即使在我阅读官方文件的解释之后,我也看不出第二个论点试图做什么......所以这个论证有什么作用?或者是为了接受第三个论证而在那里? (但是我认为函数应该同时使用参数名称和参数,例如,JSON.stringify(obj, space=4)。我不确定在Javascript中是否允许这种语法,所以请原谅我,如果不是的话。首先知道我的期望是正确的,所以想要抛出一个问题)。

谢谢。

回答

7

第二个参数可以是在进行串化时执行替换的功能。

一个或不确定的第二个参数意味着您要使用标准 字串,无需任何定制。

https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_pa

在Firefox 3.5.4起,JSON.stringify()通过使用可选参数提供了额外的 定制功能。该 语法是:

jsonString = JSON.stringify(值[,替换器[,空间]])

值的JavaScript对象转换成JSON字符串。

替换器,其改变所述字符串化过程的行为,或 充当用于 白名单中选择的值对象的属性被包括在 JSON字符串字符串和Number对象的数组的函数。如果此值为空或未提供,则该对象的所有属性都将包含在生成的JSON字符串中。

space用于将空白插入输出的字符串或数字对象 JSON字符串用于提高可读性。如果这是一个数字,那么 指示用作空格的空格字符数;如果这个数字大于 ,那么它的上限为10。小于1 的值表示不应使用空格。如果这是一个字符串,字符串 (或字符串的前10个字符,如果它比这更长) 用作空格。如果未提供此参数(或者是 null),则不使用空白。替代参数

替换参数可以是函数或数组。作为 函数,它需要两个参数,密钥和值为 字符串化。提供密钥的对象是 替代者的这个参数。最初它会被一个代表被串化对象的空键 调用,然后调用 对象或数组上的每个属性被串化。应该 返回应添加到JSON字符串值,如下所示:

如果返回一个数字,对应于这个数字的字符串作为该属性的值 时添加到JSON字符串。如果 您返回一个字符串,那么当 将其添加到JSON字符串时,该字符串将用作该属性的值。如果返回布尔值,则在将 添加到JSON字符串时,将“true”或 “false”用作属性的值。如果返回任何其他对象,则该对象将递归地字符串化为JSON字符串,并在每个属性上调用替换程序 函数,除非对象是函数,其中 未向JSON字符串添加任何内容。如果您返回未定义,则 属性不包含在输出JSON字符串中。注意:不能使用 替代函数从数组中删除值。如果你 返回未定义或函数,则使用空值。

function censor(key, value) { 
    if (typeof(value) == "string") { 
    return undefined; 
    } 
    return value; 
} 

var foo = {foundation: "Mozilla", 
      model: "box", 
      week: 45, 
      transport: "car", 
      month: 7}; 
var jsonString = JSON.stringify(foo, censor); 
The resulting JSON string is {"week":45,"month":7}. 

如果代用品是一个阵列,所述阵列的值指示在对象中的属性 应包含在所得到的JSON 串的名称。

相关问题