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程序执行之前已经存在了.意思就是说:开发人员不必显式地实例化内置对象,因为他们已经实例化了. ...
随机推荐
- 解决jenkins日志爆满 DNS查询错误
一.故障 公司的jenkins因为日志量太大把磁盘占满,进而影响了其他程序,仔细一看日志文件"/var/log/jenkins/jenkins.log"几分钟产生了30G的日志 日 ...
- [服务器时区问题]PHP Warning: strftime(): It is not safe to rely on the system's timezone set
PHP Warning: strftime(): It is not safe to rely on the system's timezone set 当运行一些程序时,在httpd日志中会有如下警 ...
- nginx重新编译不停服
找到安装nginx的源码根目录,如果没有就下载新的安装包 .tar.gz 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录 cd n ...
- 使用graphviz绘制流程图
转自 http://www.cnblogs.com/CoolJie/archive/2012/07/17/graphviz.html
- 撸一个vue的双向绑定
1.前言 说起双向绑定可能大家都会说:Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更 ...
- 建立本地yum仓库
[root@ks-server ~]# cd /etc/yum.repos.d/[root@ks-server yum.repos.d]# ls CentOS-Base.repo CentOS-Med ...
- selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装
学习目的: 掌握自动化框架中需要的一些基础web操作 正式步骤: 使用title_contains检查页面是否正确 # -*- coding:utf-8 -*- import time from se ...
- 经典卷积神经网络——AlexNet
一.网络结构 AlexNet由5层卷积层和3层全连接层组成. 论文中是把网络放在两个GPU上进行,为了方便我们仅考虑一个GPU的情况. 上图中的输入是224×224224×224,不过经过计算(224 ...
- poj1961(kmp算法next数组应用)
题目链接:https://vjudge.net/problem/POJ-1961 题意:给定一个长为n的字符串(n<=1e6),对于下标i(2<=i<=n),如果子串s(1...i) ...
- [CF429E]Points ans Segments_欧拉回路
Points and Segments 题目链接:www.codeforces.com/contest/429/problem/E 注释:略. 题解: 先离散化. 发现每个位置如果被偶数条线段覆盖的话 ...