JSON.stringify()的深度使用
在使用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()的深度使用的更多相关文章
- 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较
样本:1MB的JSON文件,引入后生成500份的一个数组: 结果如下: 拷贝性能: JSON.parse(JSON.stringify()) 的方法:2523.55517578125ms immuta ...
- javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())
javascript 数组和对象的浅度复制和深度复制在平常我们用 ‘=’来用一个变量引用一个数组或对象,这里是‘引用’而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3,' ...
- JSON.parse(JSON.stringify()) 实现对对象的深度拷贝,从而互不影响
JSON.parse(JSON.stringify({"key": "value"})) 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字 ...
- angular,,以及深度拷贝问题;JSON.parse,JSON.stringify灵活运用
问题: $scope.list = [];$scope.listTree = {};$scope.dataTree = []; //获取listTree的数据$scope.getList = func ...
- 深度使用JSON.stringify()
按照 JSON 的规范,使用 JSON.stringify() 做对象序列化时,如果一个属性为函数,那这个属性就会被忽略. const data1 = { a: 'aaa', fn: function ...
- JSON.parse()和JSON.stringify()&&traditional(ajax请求)的作用
parse是一个字符串中解析出json对象,如 var str = '{"name":"haizeiwang"}' 结果: JSON.parse(str) na ...
- js 中 new call apply bind JSON.stringify 的原理以及模拟实现
1.new的原理和实现 它创建了一个全新的对象. 它会被执行 [[Prototype]](也就是 __proto__)链接. 它使 this指向新创建的对象. 通过 new创建的每个对象将最终被 [[ ...
- JSON.parse()和JSON.stringify()
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
- JSON.stringify()与JSON.parse()
JSON.stringify()用于把一个对象解析成字符串,如 var student = { age: 23, name: 'wang' } JSON.stringify(student); 结果: ...
随机推荐
- redux源码图解:createStore 和 applyMiddleware
在研究 redux-saga时,发现自己对 redux middleware 不是太了解,因此,便决定先深入解读一下 redux 源码.跟大多数人一样,发现 redux源码 真的很精简,目录结构如下: ...
- 关于mysql设置外键,实现参照性完整性约束,以及workbench上的一个bug(?)
一.本次数据库中有student,course,sc表,其设置情况 -- 创建course表 CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) D ...
- jdk的下载
1.打开oracle的官网https://www.oracle.com/index.html 2.拖动页面到最后,找到java for developer 并点击 3. 4.拖动到最后找到java A ...
- CF D.Mister B and Astronomers
题意概括好麻烦, 好吧既然是英文题面那放一下题意. 题意:有 n 个观察员,第一个观察员在 0 秒开始观察星空,随后第i 个观察员会在第 i − 1 个观察员之后 ai 秒观察,第一个观察员也会在第 ...
- django1.4 简单事例 ,根目录下templates
django发展很快,但是有的是用的老版本,比如我现在看到一个项目,它用的是 Django1.4,而且app不是创建在了项目的根目录下,这样,它的Setting中设置就会不一样,若是设置错误,就会找不 ...
- 使用 AppScan 进行扫描
针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Analysis and Action ...
- reset Cisco 2960 password
详见:http://www.cahilig.net/2014/04/14/how-reset-cisco-2960-switch-password-without-losing-your-config ...
- nginx配置备份
server { listen 80; server_name localhost; set $expires_duration "30d"; if ($uri ~* \.html ...
- [mybatis]Example的用法-转
转自:https://blog.csdn.net/zhemeban/article/details/71901759 Example类是什么? Example类指定如何构建一个动态的where子句. ...
- js配置文件路径和项目目录文件夹位置的一致性
在js文件引入的时候注意配置文件的路径是否和项目目录中的文件夹位置一致,如果不一致, 浏览器会指出找不到文件404的情况