js之数据类型(对象类型——单体内置对象——JSON)
JSON(Java Script Object Notation)使用JavaScript语法,是用于存储和传输数据的格式,通常用于服务端向网页传递数据。JSON格式仅仅是一个文本,文本可以被任何编程语言读取及作为数据格式传递(一种类似js中的对象格式的字符串,json它是一个字符串,只不过长的像对象)从上面的描述中我们可以看到如下知识
JSON的规则:数据放在了一对引号当中,用{}或者是[]括起来;里面的每一个数据都是以键值对表示(key:value);key必须放双引号,单引号不行:每个数据之间用逗号隔开.
JSON的用途:用于js与后端进行数据的交互
JSON属性值:只能是10进制数值,字符串(双引号),布尔值和null,数组,符合JSON要求的对象(言外之意是不能为函数,NaN,+(-)Infinity和undefined)。
<script>
//json的数组格式
var arr = ['davina', 'amy', 'lisa']; //存储字符串的数组
console.log(arr[2]);//lisa var arr1 = [arr,
{
"name": "dvaina",
"age": 18
},
{
"name": "lisa",
"age": 20
}]
console.log(typeof arr1, arr1[2].name); //object lisa
</script>
JSON对象的方法:stringify()和parse().
JSON.stringify()方法将一个对象转成JSON格式的字符串,如果对象中的key没有加引号,也是可以转换的,转换后的结果会自动给它加上引号。
一个参数的情况:
<script> var obj1 = [1, 2, 3];
var obj2 = { "name": 'dvaina', "age": '20' };
var obj3 = { name: 'lisa', "age": '20' };
console.log(JSON.stringify(obj1)); //[1,2,3]
console.log(JSON.stringify(obj2)); //{"name":"dvaina","age":"20"}
console.log(JSON.stringify(obj3)); //{"name":"lisa","age":"20"} //stringify()方法把数学对象转换成字对象的字符串形式
console.log(JSON.stringify(Math)); //{}
console.log(JSON.stringify(new Boolean(true))); //true
//stringify()方法把日期对象转换成字符串
console.log(JSON.stringify(new Date())); //"2019-12-09T06:22:34.685Z" //转换中,如果对象成员是undefined或函数,成员会忽略
//如果数组的成员是undefined或者函数,则值会转成null
obj4 = {
a: function () { },
b: undefined,
c: [function () { }, undefined],
}
console.log(JSON.stringify(obj4)); //{"c":[null,null]}
</script>
第二个参数也可以是一个函数或数组
<script>
//如果第二个参数是函数,序列化过程中的每个属性都会被这个函数转化和处理
var str = {
"name": "davina",
"age": 18,
"phone": 11111111
}
var jsonStr = JSON.stringify(str, function (key, value) {
if (key == "phone") {
return "(0713)" + value;
} else if (typeof value === "age") {
return value + 2;
} else {
return value;
}
})
console.log(jsonStr) //{"name":"davina","age":18,"phone":"(0713)11111111"}
//如果是数组,那只有包含在这个数组中的属性才会被序列化到json字符串中
var str1 = {
"name": "davina",
"age": 18,
"phone": 11111111
}
var jsonStr1=JSON.stringify(str1,["name","age","phone","address"]);
console.log(jsonStr1); //{"name":"davina","age":18,"phone":11111111}
//如果是null,那和空一样
</script>
第三个参数用于美化输出——
JSON.parse()将字符串转化成对象,如果传入的不是有效JSON格式,会报错。JSON.parse()也可以接收一个函数参数,在每个键值对上调用,这个函数被称为还原函数,该函数接收两个参数,一个键和一个值。如果还原函数返回undefined,那就要从结果中删除相应的键,如果返回其它值,则将值插入到结果中。
<script>
console.log(JSON.parse('{}')); //{}
console.log(JSON.parse('true')); //true
var o = JSON.parse('{"name":"davina"}');
console.log(o.name); //dvaina
//JSON.parse()也可以接收一个函数参数,在每一个键值对调用,这个函数被称为还原函数,这个函数接收两个参数,一个键和一个值,返回一个值 var book = {
"name": "js",
"date": new Date(2019, 9, 1)
}
var jsonStr = JSON.stringify(book); console.log(jsonStr)//{"name":"js","date":"2019-09-30T16:00:00.000Z"} var bookName = JSON.parse(jsonStr, function (key, value) {
if (key == 'date') {
return new Date(value);
}
return value;
})
console.log(bookName.date.getFullYear());//2019
</script>
eval()类似于JSON.parse()方法,可以将json字符串转换成json对象,但是它也可以执行不符合json格式的代码,所以尽量少用或不用。
js之数据类型(对象类型——单体内置对象——JSON)的更多相关文章
- js之数据类型(对象类型——单体内置对象——Math)
Math是一个内置对象,它具有数学常数和函数的属性和方法.Math对象用于执行数学任务,和其它对象不同,Math只是一个静态对象并没有Math()构造函数,实际上,Math()只是一个由js设置的对象 ...
- js单体内置对象
js单体内置对象:js的内置对象,是ECMAScritp提供的.不依赖于宿主环境的对象,我的理解就是在我们开发之前js里面就已经存在的对象.单体内置对象就是是不需要通过new来实例化的,例如我们的st ...
- RegExp类型,单体内置对象
1.RegExp类型: 1)什么是正则表达式:RegExp --是一种规则,模式 --强大的字符串匹配工具 --创建: --使用RegExp构造函数创建:var re=new ...
- JavaScript高级编程———基本包装类型String和单体内置对象Math
JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...
- DOM笔记(九):引用类型、基本包装类型和单体内置对象
一.Array 1 .创建数组的方式 //Array构造函数(可以去掉new) var colors0 = new Array(); var colors1 = new Array(20); var ...
- Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象
什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...
- 《JavaScript 闯关记》之单体内置对象
ECMA-262 对内置对象的定义是「由 JavaScript 实现提供的.不依赖于宿主环境的对象,这些对象在 JavaScript 程序执行之前就已经存在了」.意思就是说,开发人员不必显式地实例化内 ...
- javascript学习笔记 - 引用类型 单体内置对象
七 单体内置对象 1.Global对象 不属于任何对象的属性和方法,都归于它.全局作用域中定义的变量.函数,都属于Global对象 1.1 URI编码 encodeURI <=>deco ...
- 单体内置对象——Global对象
单体内置对象的定义:由ECMAScript实现提供的.不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前已经存在了.意思就是说:开发人员不必显式地实例化内置对象,因为他们已经实例化了. ...
随机推荐
- v-on绑定特性命名带小横杠 ‘-’与props属性中变量怎么对应
特性命名问题: 矛盾点一:html的特性不区分大小写 矛盾点二:Vue中除了模板命名,其他命名不允许出现小横杠 ‘-’ 在js文件内,命名为驼峰式,camerCase,进入html文件,自动转换成短横 ...
- 《maven实战》笔记(5)----maven的版本
maven中构件和项目都有自己的版本,其中分为稳定的发布版本和不稳定的快照版本. 1.0.0.1.3-alpha-4和2.0就是稳定版本,而2.1-SNAPSHOT和2.1-20091214.2214 ...
- JavaWeb MySQL 实现登录验证
0. 环境准备 项目创建: IDEA 创建 Servlet 项目详细步骤:https://www.jianshu.com/p/386a79d16e05 导入 MySQL 驱动包: Java MySQL ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_23-页面预览-页面预览开发
1.用户进入cms前端,点击“页面预览”在浏览器请求cms页面预览链接. 2.cms根据页面id查询DataUrl并远程请求DataUrl获取数据模型. 3.cms根据页面id查询页面模板内容 4.c ...
- SQL Server 高级函数汇总【转】
看到一个帖子,博主收集的很全,里面涵盖了一些常用的内置函数,特此收藏下: 原文链接:https://blog.csdn.net/wang1127248268/article/details/53406 ...
- JAVA 基础编程练习题24 【程序 24 根据输入求输出】
24 [程序 24 根据输入求输出] 题目:给一个不多于 5 位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. package cskaoyan; public class cskaoya ...
- [C++]多源最短路径(带权有向图):【Floyd算法(动态规划法)】 VS n*Dijkstra算法(贪心算法)
1 Floyd算法 1.1 解决问题/提出背景 多源最短路径(带权有向图中,求每一对顶点之间的最短路径) 方案一:弗洛伊德(Floyd算法)算法 算法思想:动态规划法 时间复杂度:O(n^3) 形式上 ...
- iOS-意见反馈UITextView的使用+不能输入字符输入
@interface DMFeedbackViewController ()<UITextViewDelegate,UIAlertViewDelegate>@property (nonat ...
- centos(linux)-maven配置
1.确认已经安装jdk 2.下载 3.解压 tar -zxvf apache-maven-xxx(tab补全文件名) 4.配置环境变量 (1)sudo vim /etc/profile (2)在最下面 ...
- [译]如何使用Python构建指数平滑模型:Simple Exponential Smoothing, Holt, and Holt-Winters
原文连接:How to Build Exponential Smoothing Models Using Python: Simple Exponential Smoothing, Holt, and ...