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程序执行之前已经存在了.意思就是说:开发人员不必显式地实例化内置对象,因为他们已经实例化了. ...
随机推荐
- 001-多线程-JUC线程池-线程池架构-Executor、ExecutorService、ThreadPoolExecutor、Executors
一.概述 1.1.线程池架构图 1. Executor 它是"执行者"接口,它是来执行任务的.准确的说,Executor提供了execute()接口来执行已提交的 Runnable ...
- zabbix 启动报错 cannot set resource limit: [13] Permission denied
zabbix 启动报错 cannot set resource limit: [13] Permission denied 1.zabbix-server 启动报错 报错信息如下: ::140823. ...
- Jmeter 逻辑控制器 之 吞吐量控制器
吞吐量控制器 听起来好像比较难理解或者比较高深,其实它非常简单,今天我仔细看了下帮助,分享下对它的理解. 一.认识吞吐量控制器 作用:控制其下子样例执行的频次,有两种控制模式,一种是直接设置数值,一种 ...
- Python3 Selenium自动化web测试 ==>FAQ:日期格式和日期字符串格式相互转换
学习目的: 掌握python的基础应用 场景: 生成的测试日报需要加上时间戳作为唯一标志,免得文件覆盖,过往的文件丢失 因为os.rename方法要求文件名必须拼接的都是字符串 代码释义: # 日期转 ...
- 开始学习Yii
YII是我一直想学的一个框架,之前看过TP3.2和5.0.Yii是Yes it is 的缩写. 我采用下载源码的方式安装,解压到web目录.以前用过Composer,Yii官网也推荐用Composer ...
- 【算法】矩阵填数,深度优先搜索(DFS),Pascal改C语言
面向对象的上机实验 题目 以下列方式向 5*5 矩阵中填入数字.设数字i(1=<i<=25),则数字i+1 的坐标位置应为(E, W).(E, W)可根据下列关系由(x,y)算出: 1)( ...
- idea设置方法注释
1. File-->Settings-->Editor-->Live Templates 1.1 新建Template Group: 命名为 methodNote 1.2 在meth ...
- std::unique_lock与std::lock_guard分析
背景 C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢,导致程序出现未定义或异常行为.通常的做法是在修改共享数据成员时进行加锁(mutex).在使用锁 ...
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- 什么是文件存储NAS
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例.E-HPC 和容器服务等计算节点的文件存储服务. 定义 阿里云文件存储 NAS 是一个可共享 ...