资讯专栏INFORMATION COLUMN

JavaScript学习之JSON对象

banana_pi / 2456人阅读

摘要:原始类型的值只有四种字符串数值必须以十进制表示布尔值和不能使用和。字符串必须使用双引号表示,不能使用单引号。数组或对象最后一个成员的后面,不能加逗号。

JSON对象

补充记录一下,有些方法很需要熟练记忆的

JSON对象的规定

JSON对象对值有严格的规定

复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
字符串必须使用双引号表示,不能使用单引号。
对象的键名必须放在双引号里面。
数组或对象最后一个成员的后面,不能加逗号。

我对这段话的理解是:

JSON对象的值是一个值,必须是类型string,number,bool,null,array以及object;对于array与object,应该是我们经常自定义的{}与[]类型的对象和数组

string类型的值必须是双引号,所以也就包括了object中的键名必须用双引号

数值必须以十进制表示

如果值为数组或者对象,那么其键值类型必须符合第一条;

一般数组或者对象最后写逗号也会忽略,而JSON对象则不允许写

JSON.stringify(n)

该方法用来将参数值转化为JSON字符串

参数类型string
返回呆双引号的参数值;之所以加为了知道参数是string转化过来的JSON.stringify("javascript"); //"javascript"

参数类型为number

console.log(JSON.stringify(1));                 // 1
console.log(JSON.stringify(0XFFF));             //4095
console.log(JSON.stringify(Infinity));          //null
console.log(JSON.stringify(NaN));               //null

参数类型bool

console.log(JSON.stringify(false));            //false
console.log(JSON.stringify(true));             //true

参数类型null,返回字符串null;JSON.stringify("null"); //null

参数类型undefined,单纯一个undefined值时,会忽略直接返回自身undefined,不是字符串undefined

参数类型Symbol,同上undefined一模一样

参数类型数组

JSON.stringify([1,null,NaN,undefined,function () {},(new Date()),,]);
//             [1,null,null,null,    null,          "2018-11-02T15:22:53.482Z", null]

注意空位会返回null

参数类型对象

console.log(JSON.stringify({"a":1,"b":undefined}));                     //{"a":1}  忽略undefined键值
console.log(JSON.stringify({"a":null,"b":NaN}));                        //{"a":null,"b":null} NaN与Infinity返回null
console.log(JSON.stringify({"a":function () {},"b":(new Date())}));     //{"b":"2018-11-02T15:27:13.886Z"} 忽略undefined键值

当对象中有不可遍历属性时,跳过该属性

JSON.stringify(n,m)

它的第二个参数可填入数组或者函数

参数为数组时,仅适用于第一个参数为对象时才有效;其对象包括数组
起到过滤的效果,留我们自己想要的键值对

console.log(JSON.stringify({a : 1, b : 2}, ["b"]));         //{b : 2}

参数为函数:

JSON.stringify({ a: 1, b: [1, 2] }, (key, value) => {
  console.log(key + ":" + value);
  return value;
}); 
/*      
:[object Object]
a:1
b:1,2
0:1
1:2
*/

由例子可以看出,一共执行了5次
第一次执行将参数整体作为value,key为空;
剩余每次都按更加value的值进行下一次执行;
若value为对象,会执行完对象中的第一个成员,再去执行第二个成员,直到没有value
返回值,我认为它是通过value把参数遍历一遍,将value填入相应位置,将其返回

由于上面的特性可以实现深拷贝
但是有缺陷,当键值为undefined,函数,Symbol类型或者xml,以及不可遍历元素;都会将其忽略

toJSON 方法

JSON.stringify()正是调用了toJSON方法;所以对其进行改造可以改变输出
例如当参数为正则时,会返回空对象

JSON.stringify(/aa/) // {}
RegExp.prototype.toJSON = RegExp.prototype.toString;
JSON.stringify(/aa/) // "/aa/"
JSON.parse()

该方法则是将JSON.stringify()生成的结果还原

JSON.parse(JSON.stringify("123"));  //123
JSON.parse(JSON.stringify(undefined));  //报错不是JSON对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98964.html

相关文章

  • JavaScript机器习之线性回归

    摘要:不能用于机器学习太慢幻觉矩阵操作太难有函数库啊,比如只能用于前端开发开发者笑了机器学习库都是开发者机器学习库神经网络神经网络自然语言处理卷积神经网络一系列库神经网络深度学习我们将使用来实现线性回归,源代码在仓库。 译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。 原文: Machine Learning with JavaScript : Part 1 ...

    gitmilk 评论0 收藏0
  • JavaScript机器习之线性回归

    摘要:不能用于机器学习太慢幻觉矩阵操作太难有函数库啊,比如只能用于前端开发开发者笑了机器学习库都是开发者机器学习库神经网络神经网络自然语言处理卷积神经网络一系列库神经网络深度学习我们将使用来实现线性回归,源代码在仓库。 译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。 原文: Machine Learning with JavaScript : Part 1 ...

    qc1iu 评论0 收藏0
  • es6习之map和set

    摘要:和定义一组键值对的集合它是一组键值对的数据结构,由于之前的键必须是字符串。 Map和Set Map 定义:一组键值对的集合 它是一组键值对的数据结构,由于之前javascript的键(key)必须是字符串。为了使键可以是多种类型的于是在最新的es6中引入了map这种数据结构,这样可以加快查询速度,类似于查字典 方法和属性 var m = map() //空map m.set(学生年龄,...

    lvzishen 评论0 收藏0
  • Java培训习之Java开源软件的汇总

    摘要:开源软件的汇总开源插件是一个类似于的插件,它可以帮助你在不退出的环境下浏览本地文件系统。事件模型支持基于的事件提交。开源容器是一个非侵入式的对象反转控制容器容器。开源插件提供一个可针对文件语法进行着色的编辑器。 Java开源软件的汇总:EcSplorer 【Java开源 Eclipse插件】EcSplorer(Eclips...

    qiangdada 评论0 收藏0
  • JS习之JSON数据格式

    摘要:简析简介,是一种数据格式而不是编程语言,它和并没有从属关系,任何编程语言都可以使用语法规则分为三类简单值与语法相同,可以在中表示字符串,数值,布尔值和,但是其不支持数值字符串对象键值和键名都得用双引号数组解析和序列化目标对象,过滤器,字符串 JSON简析 1.简介 JSON,是一种数据格式而不是编程语言,它和JavaScrip并没有从属关系,任何编程语言都可以使用JSON; 2.语法...

    isaced 评论0 收藏0

发表评论

0条评论

banana_pi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<