这篇文章主要来讲HTML5中的新方法:parse()把字符串转换成josn格式的数据和stringify()把josn格式的数据转换成字符串

eval()方法的回顾

eval()方法可以将任何字符串解析成js,下面来解析一个函数,并且解析完后执行这个函数

var str = 'function show(){alert(3)}';
eval(str);
show();  //结果可以alert出3

但是这个方法有个缺点,就是如果这个字符串里面带有攻击性的代码,那么转换成js后就会不安全

parse()把字符串转换成josn格式的数据

只能解析JSON形式的字符串变成JS  (所以安全性要高一些),另外需要注意的是需要转换的字符串必须是严格的的JSON形式的字符串(字符串中的属性要严格的加上引号)

var str = '{"name":"hello"}';   //一定是严格的JSON形式
var json = JSON.parse(str);
alert( json.name );  //打印出hello

stringify()把josn格式的数据转换成字符串

这个JSON格式的数据可以不是严格的,比如{name : "hello"},name没有加上双引号,使用stringify()方法转换成字符串时会自动的把双引号加上

var json = {name : "hello"};
var str = JSON.stringify(json);
alert( str );  //{"name" : "hello"},自动加上了引号

parse()和stringify()的应用——深度克隆新对象

首先来看一下对象引用赋值的的实例

var a = {name : 'hello'
};
var b = a;  //将a这个对象的引用赋值给了b,就相当于两个人共用一台电脑,当改变这个对象的时候,a也会跟着改变
b.name = 'hi';   //
alert( a.name ); //hi

再来看一下对象克隆的一个实例

var a = {name : 'hello'
};
var b = {};//遍历对象a的属性和方法,并且赋给b对象,b对象拥有了a的所有属性和方法,当b改变属性的时候不会影响到a
for(var attr in a){b[attr] = a[attr];
}
b.name = 'hi';
alert( a.name );  //hello
alert( b.name );  //hi

但这这种克隆是浅层次的克隆,当a对象里面还有一个对象的时候,在将对象的属性赋给b的时候还是会存在引用的关系,所以这种方法无法做到深层次的克隆

如果还是使用这种方法来做深层次的克隆的话,就要使用到递归来一层层的来拷贝a对象里面的属性或者方法,详情请查看对象的克隆(包括深度克隆)的几种方法

那么接下来我们使用parse()和stringify()这两个方法来深度克隆对象

原理是使用stringify()将a对象解析成字符串,然后再使用parse()方法解析成对象并且赋值给b对象,这种方式可以做到深度的克隆和浅层次的克隆(方法都是一样的)

var a = {name : { age : 100 },num: [2,3,4]
};
var str = JSON.stringify(a);  //将a对象解析成字符串
var b = JSON.parse(str);   //将str字符串解析成对象并且赋值给b,那么b这个对象就跟a对象没有引用关系
b.name.age = 200;
b.num = [5,6,7];
alert( a.name.age );   //100
alert( b.name.age );    //200
alert( a.num );   //2,3,4
alert( b.num );     //5,6,7

如何做到与其他浏览器兼容

这两个方法非常好用但又写浏览器不支持(IE低版本),那么如果需要兼容低版本的话,需要去josn官网去下载json2.js这个插件

然后直接将这个插件引入进来就可以了

转载于:https://www.cnblogs.com/LO-ME/p/7385248.html

ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象相关推荐

  1. es6 日期字符串转日期_量化数据预处理-中文日期(含)转英文日期

    1.引入 时间是pandas数据的主要索引.中文网站上下载的数据含有中文日期,其中包含年月日.如下图所示: 沪深300指数的数据含有中文,需要处理成python的 datetime格式才能放入回测框架 ...

  2. ES6/02/创建对象,构造函数和原型,原型和原型链,this指向,类,ES5新增的方法,数组方法,回调函数,ES5新增的字符串方法,ES5中新增的对象方法

    创建对象 1,利用new Object()创建对象 var obj1 =new Object(); 2,利用对象字面量创建对象 var obj2={}; 3,利用构造函数创建对象 function S ...

  3. ES6基础-字符串的新特性

    字符串的新特性 1. es6新增遍历接口:for...of循环遍历 2. 模版字符串: 使用``号对字符串进行原格式输出 可以使用trim()方法进行取消换行 模版字符串潜入变量,需要将变量名写在${ ...

  4. 数组方法大全ES5+ES6

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. 使用 Array 构造函数 2. 使用数组字面量表示法 数组原型方法 1. join() 2.push()和pop() ...

  5. ES5 ES6相关内容 day15

    1. JavaScript 的版本 JavaScript这种语言的基本语法结构是由ECMAScript来标准化的, 所以我们说的JavaScript版本一般指的是ECMAScript版本. 2009年 ...

  6. 【ES6】字符串的拓展

    [ES6]字符串的拓展 一.为什么ES6要进行字符拓展? 二.ASCLL码.Unicode编码.UTF-8编码的异同 三.ES6新增的字符串接口 1)codePointAt() 2)codePoint ...

  7. Js Array数组ES5/ES6常用方法

    Js Array数组ES5/ES6常用方法 1.栈方法(先进后出) push():在数组的最后一项后追加值(参数:可以为多个值或数组) 返回:数组的长度,改变了原数组. var a=[1,2,3] a ...

  8. es6之字符串添加的东西

    在es6里边对字符串添加了一些东西! 字符串模板(非常友善) 相信大家之前都遇到过万恶的字符串拼接,真是噩梦,不过之后有了字符串模板之后,再也不用担心字符串拼接会乱了... 之前的字符串拼接 let ...

  9. 高级JavaScript #ES6(模板字符串,let,箭头函数,forof,参数增强,解构,class,promise)

    模板字符串 1.模板字符串: 只要拼接字符串 都用模板字符串代替+a.整个字符串包裹在一对儿反引号 ` ` 中b.反引号``中支持换行 c.反引号中需要动态生成的内容必须放在${}里d. ${}里: ...

最新文章

  1. opengl之自动纹理
  2. SQLite实例分析
  3. 6.17 dokcer(一)Compose 简介
  4. FIREDAC连接SQLITE乱码的解决
  5. 【Elasticsearch】es 7.8.0 java 实现 BulkRequest 批量写入数据
  6. Activiti(一)SpringBoot2集成Activiti6
  7. TCP系列11—重传—1、TCP重传概述
  8. 拓端tecdat|R语言法国足球联赛球员多重对应分析(MCA)
  9. View的setLayerType() , setDrawingCacheEnabled() 方法用法
  10. #define c# 报错_天轰穿C#教程之#define和#undef【原创】
  11. Android 智能手机程序使用历史记录查询
  12. layui上传文件请求接口异常_解决layui table表单提示数据接口请求异常的问题
  13. 游鸿明歌曲白色恋人浅析
  14. luogu P2706 巧克力
  15. 人脸识别入门论文《Deep Facial Expression Recognition: A Survey》学习笔记
  16. 华为路由交换学习篇-路由
  17. 基于PaddleOCR银行卡识别实现(一)
  18. C语言课设-----工资管理系统(附全部源码)
  19. python中没有arcpy怎么办_AGS Python开发-ArcPy开发基础
  20. 【php】php中global与$GLOBAL['']的区别

热门文章

  1. MySql 高级查询强化学习
  2. 【DRF+Django】微信小程序入门到实战_day04(上)
  3. 基于Openfire Smack开发即时通讯应用、搭建Openfire服务器(一)
  4. 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
  5. 探花交友10-数据统计与内容审核
  6. 内核同步机制——蜗窝科技
  7. 微信小程序 阻止事件冒泡
  8. Springboot毕设项目电子竞技赛事管理系统f1v55java+VUE+Mybatis+Maven+Mysql+sprnig)
  9. android 使用signingConfigs进行打包
  10. 6月 CSDN 创作者之夜:获奖名单公布