在使用JSON.stringify()对JSON数据进行序列化时

1> 如果里面的属性是function,则会被忽略

const data = {
a: 'a',
fn: funciton() {
return true
}
} JSON.stringify(data); // "{"a":"a"}" *******fn属性被忽略了**********

2> 如果里面的属性的值是undefined, 也是会被忽略的

const data = {
a: 'a',
b: undefined
} JSON.stringify(data); // "{"a":"a"}" *******b属性被忽略了**********

3>但是如果里面的属性值是null, 是不会被忽略的

const data = {
a: 'a',
b: null
} JSON.stringify(data); // "{"a":"a","b":null}" *******b属性没有被忽略**********

其实JSON.stringify()有三个参数:stringify(value, [replacer, space](可选的, replacer: 自定义的函数,space: 格式化输出(相当于tab键,值的范围是[1(负数的时候默认是1),10]))),为了属性值为function和undefined的属性在序列化的时候不要被忽略,我们可以对replacer做以下操作

比如:

const replace = function(k, v) {
   if(v === undefined) {
    return 'undefined';
   }
if(typeof v === 'function') {
 return Function.prototype.toString.call(v);
}
return v;
} JSON.stringify(data, replace); //"{"a":"a","c":"undefined","b":"function () {\n         return true;\n    }"}"

************注意************

自定义对象属性的时候, 尽量不要定义toJSON方法,原因如下:

const data = {
a: 'a',
toJSON: function() {
return true;
}
}
JSON.stringify(data); //"true" (toJSON会把其他的属性都覆盖掉)

JSON.stringify()的深度使用的更多相关文章

  1. 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较

    样本:1MB的JSON文件,引入后生成500份的一个数组: 结果如下: 拷贝性能: JSON.parse(JSON.stringify()) 的方法:2523.55517578125ms immuta ...

  2. javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())

    javascript 数组和对象的浅度复制和深度复制在平常我们用 ‘=’来用一个变量引用一个数组或对象,这里是‘引用’而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3,' ...

  3. JSON.parse(JSON.stringify()) 实现对对象的深度拷贝,从而互不影响

    JSON.parse(JSON.stringify({"key": "value"})) 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字 ...

  4. angular,,以及深度拷贝问题;JSON.parse,JSON.stringify灵活运用

    问题: $scope.list = [];$scope.listTree = {};$scope.dataTree = []; //获取listTree的数据$scope.getList = func ...

  5. 深度使用JSON.stringify()

    按照 JSON 的规范,使用 JSON.stringify() 做对象序列化时,如果一个属性为函数,那这个属性就会被忽略. const data1 = { a: 'aaa', fn: function ...

  6. JSON.parse()和JSON.stringify()&&traditional(ajax请求)的作用

    parse是一个字符串中解析出json对象,如 var str = '{"name":"haizeiwang"}' 结果: JSON.parse(str) na ...

  7. js 中 new call apply bind JSON.stringify 的原理以及模拟实现

    1.new的原理和实现 它创建了一个全新的对象. 它会被执行 [[Prototype]](也就是 __proto__)链接. 它使 this指向新创建的对象. 通过 new创建的每个对象将最终被 [[ ...

  8. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  9. JSON.stringify()与JSON.parse()

    JSON.stringify()用于把一个对象解析成字符串,如 var student = { age: 23, name: 'wang' } JSON.stringify(student); 结果: ...

随机推荐

  1. 内联元素padding与高度可控的分隔线实例页面

    html: <a href="">登录</a><a href="">注册</a> css: a + a:befo ...

  2. pdf.js 使用实例(app直接预览pdf格式的文档)

    pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责 ...

  3. JavaScript新手入门 贪吃蛇

    从小就在玩贪吃蛇,但是知道今天自己做了一遍才知道原理的具体的实现步骤. 刚进入界面时显示开始游戏(不重要,本人比较喜欢吹毛求疵) 中间黑色部分为游戏的主要展示部分 主要步骤及源码: body中代码,红 ...

  4. python基础(九)

    一.私有 class DB: port = 3306 #类变量 def __init__(self): self.host = '127.0.0.1' self.__user = 'root' #实例 ...

  5. 实验十 ZStack 网状网络实验

    实验十 ZStack 网状网络实验[实验目的]1. 了解 ZigBee 网状网络结构2. 掌握构建网状网络的方法[实验设备]1. 装有 IAR 开发工具的 PC 机一台2. 实验箱一台3. CCDeb ...

  6. 小妖精的完美游戏教室——人工智能,A*算法,启发因子篇

    //================================================================//// Copyright (C) 2017 Team Saluk ...

  7. sku

    以淘宝为例,sku是具体到某一个商家具体规格商品,比如某商家红色64g的iPhone6,sku对应有对应的价格和库存.而SPU就是我们在输入框里输入的iPhone6,它是多个商家的集合.淘宝的“宝贝” ...

  8. 1130-Host '192.168.0.105' is not allowed to connect to this MySQL server的解决方案

    在CentOS 7服务器(192.168.0.118)上安装mysql5.7.17后,在本地(192.168.0.105)通过Navicat连接服务器上的MySQL报错,报错如图所示: Paste_I ...

  9. freemarker demo

    <!--freemarker--> <dependency> <groupId>org.springframework.boot</groupId> & ...

  10. PythonStudy——枚举 enumerate

    # 给可迭代器对象及迭代器对象添加迭代索引 s = 'abc' for v in enumerate(s): print(v) # (0 'a') | (1 'b') | (2 'c')