Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript stringify会删除不可字符串化的值,为什么?_Javascript_Node.js_Json - Fatal编程技术网

Javascript stringify会删除不可字符串化的值,为什么?

Javascript stringify会删除不可字符串化的值,为什么?,javascript,node.js,json,Javascript,Node.js,Json,我很难理解JSON.stringify在Node.js环境中工作时会丢失一些不可stringify字段的数据 我不明白的是: 如果我们有有效的JSON,并且我们有值作为函数,我们就不能将其字符串化: var foo={func:function(){}; console.log(JSON.stringify(foo))我想这就是答案?如果没有,请告诉我 对于外部绑定,您将获得{},内部func:function(){}返回未定义的,因此是无效的json 当您试图将无法转换为json的内容(即

我很难理解JSON.stringify在Node.js环境中工作时会丢失一些不可stringify字段的数据

我不明白的是:

  • 如果我们有有效的JSON,并且我们有值作为函数,我们就不能将其字符串化:
  • var foo={func:function(){};
    
    console.log(JSON.stringify(foo))
    我想这就是答案?如果没有,请告诉我

  • 对于外部绑定,您将获得{},内部func:function(){}返回未定义的,因此是无效的json

  • 当您试图将无法转换为json的内容(即未定义或函数声明)字符串化时,就会出现null


  • 通常,为了防止意外,您应该确保它只包含数组、对象、字符串、数字、布尔值和null

    如果确实需要保留function属性,可以使用JSON.stringify的第二个参数来描述如何处理它

    比如说

    让obj={
    func:function(){}
    }
    让json=json.stringify(obj,函数(键,值){
    如果(值的类型==“函数”){
    返回“这是一个函数”;
    }否则{
    返回值;
    }
    })
    
    log(json)JSON是一种数据交换格式。它用于传输数据,与所使用的语言无关。通常,如果某些属性/值依赖于语言,则在转换为JSON时它不是有效值

    定义了许多可以在JSON中使用的值类型

    例如,发生以下情况:

    • 当一个值被转换为JSON时,如果合适的话,它将被转换为它的JSON格式,或者返回为
      未定义的
    • 将对象转换为JSON时,如果合适,对象的每个属性都将转换为其JSON形式,或者将其忽略(因为转换后的值将是
      未定义的
    • 当数组转换为JSON时,如果合适,数组的每个元素都会转换为JSON格式,或者替换为
      null

    使用passed作为
    JSON.stringify()

    的第二个参数可以覆盖此行为。为什么您认为
    {func:function(){}
    算作“有效的JSON”?JSON是并支持字符串、数字、对象(同样只包括允许的类型)、数组、布尔值和
    null
    值。没有别的了。如果值是其他值,则它不是“有效的JSON”。JSON(根据设计)无法表示任意JavaScript构造。JSON是一种数据交换格式。虽然符号看起来像JS,但它可以被各种语言(JS、PHP、Java等)使用。因此,能够在其中存储函数是毫无意义的,因为它们在JS应用程序之外的任何其他上下文中都是无用的(函数不是数据),所以,任何无效的JSON都不会被这个静态函数字符串化?我的问题是JSON.stringify什么时候会删除这些值?@JoachimSauer我知道,我上面提到的不是有效的JSON,这就是它删除这些值的原因。是吗?
    JSON.stringify
    将始终输出符合Joachim发布的链接中描述的规范的JSON。如果你读了那一页,你就会知道什么是有效的。其他任何东西都将被丢弃。