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格式的代码,所以尽量少用或不用。

原文地址:https://www.cnblogs.com/davina123/p/11929103.html

时间: 2024-08-27 19:08:20

js之数据类型(对象类型——单体内置对象——JSON)的相关文章

JS中数据类型、原始数据、内置对象、包装类型对象、typeof

JS中数据类型.内置对象.包装类型对象.typeof关系  https://segmentfault.com/a/1190000018275384 JavaScript 数据类型和数据结构   https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures 原始数据 https://developer.mozilla.org/zh-CN/docs/Glossary/Primitive 原文地址:https://www

javascript原生对象之单体内置对象(Global、Math)

[1]Global [1.1]定义:Global对象是一个终极的“兜底儿对象”,不属性于任何其他对象的属性和方法,最终都是它的属性和方法 [注意]所有在全局作用域中定义的属性和函数都是Global对象的属性.诸如isNaN().isFinite().parseInt().parseFloat()等实际上都是Global对象的方法 [1.2]编码方法 [1.2.1]encodeURI():对整个URI进行编码,用特殊的UTF-8替换所有无效的字符 [注意1]encodeURI()的不编码字符有82

基本类型、引用类型、基本包装类型和单体内置对象

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.基本包装类型和单体内置对象都是特殊的引用类型. 一.基本类型 基本类型包含Undefined.Null.Boolean.Number.String 这5种.基本数据类型是按值访问的,因为可以操作保存在变量中的实际值. 基本类型保存在内存中的栈中,大小固定,复制其变量时会创建这个值的一个副本.用typeof方法可以确定一个值是哪种基本类型. 二.引用类型 引用类型包括Object .Array.  Date.  RegExp.

RegExp类型,单体内置对象

1.RegExp类型:  1)什么是正则表达式:RegExp    --是一种规则,模式    --强大的字符串匹配工具    --创建:    --使用RegExp构造函数创建:var re=new RegExp('a','i');    --使用字面量创建:var re=/a/i;    //i--ignore表示忽略大小写 2)正则表达式里面的字符:    1)修饰符      --i:执行对大小写不敏感的匹配.      --g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)  

JavaScript基础——引用类型(四)基本包装类型(Boolean、Number、String)、单体内置对象(Global、Math)

基本包装类型 为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean.Number和String.这些类型与其它引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据.如: var s1 = "some text"; var s2 = s1.substring(2); 这个例子中的变量s1包含一个字符串,字符串当然是基本类型值.而下

高程5.7单体内置对象 5.8小结

内置对象的定义:由ECMAScript实现提供的, 不依赖于鹤环境的对象,这些对象在ECMAScript程序执行之前就已经存在了. 开发人员不必显式地实例化内置对象,因为它们已经实例化了. 前面介绍了大多数内置对象,如Object,Array和String.ECMA-262还定义了两个单体内置对象:Global和Math. 5.7.1 Global对象 没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是Global(全局)对象的属性. 诸如isNaN(),isFinite(),pa

DOM笔记(九):引用类型、基本包装类型和单体内置对象

一.Array 1 .创建数组的方式 //Array构造函数(可以去掉new)var colors0 = new Array();var colors1 = new Array(20);var colors3 = new Array("red","blue","green");//数组字面量var colors4 = ["red","blue","green"];var colors5 

第五章 单体内置对象

ECMA-262 对内置对象的定义是:"由ECMAScript 实现提供的.不依赖于宿主环境的对象,这些对象在ECMAScript 程序执行之前就已经存在了."意思就是说,开发人员不必显式地实例化内置对象,因为它们已经实例化了. 我们已经介绍了大多数内置对象,例如Object.Array 和String.ECMA-262 还定义了两个单体内置对象:Global 和Math. 7.1 Global对象 Global(全局)对象可以说是ECMAScript 中最特别的一个对象了,因为不管你

单体内置对象的理解

1.有ECMAScript提供的,不依赖于宿主环境,在程序执行之前就已经存在的对象,叫内置对象,例如Object,Array,String 也就是说,实际使用时不用实例化内置对象,因为他们已经实例化了 2.ECMAScript定义了两个单体内置对象Global和Math a.Global对象 所有在全局作用域中定义的变量和函数,都是Global对象的属性和方法,也就是说,不属于任何对象的属性和方法,都是Global的属性和方法,例如eval()和parseInt() b.Math对象 Math对