【JavaScript】20_解构对象,对象的解构与对象的序列化JSON

248 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

1、解构对象

数组中可以存储任意类型的数据,也可以存数组,

如果一个数组中的元素还是数组,则这个数组我们就称为是二维数组

解构对象,方便两数交换数值;可以反向赋值对象,数组

可以在解构的同时,进行声明

     <script>
         const arr = ["孙悟空", "猪八戒", "沙和尚"]
 ​
         let a,
         b,
         c
         // a = arr[0]
         // b = arr[1]
         // c = arr[2]
         ;
         [a,b,c] = arr;//解构赋值
 ​
         let [d,e,f,g] = ['唐僧','白骨精','蜘蛛精','玉兔精']//声明同时解构
         
         // ;[d,e,f,g] = [1,2,3]
         // ;[d,e,f=77,g=10] = [1,2,3]
         ;[d,e,f=43,g=g] = [1,2,3]//直接这样的话,会显得g未定义
         console.log(d,e,f,g)
 ​
         let [n1,n2,...n3] = [4,5,6,7] // 解构数组时,可以使用...来设置多余的元素
 ​
         function fn(){
             return ['二郎神','猪八戒']
         }
 ​
         let [name1,name2] = fn();
         console.log(name1,name2)
 ​
         //可以通过解构赋值来快速交换两个变量的值
         let a1 = 10
         let a2 = 20
 ​
         //以前的方法,需要一个中间值来交换两数值
         // let temp = a1
         // a1 = a2
         // a2 = temp
 ​
         ;[a1,a2] = [a2,a1]//[20,10]
 ​
         const arr2 = ['孙悟空','猪八戒']
         ;[arr2[0],arr2[1]] = [arr2[1],arr2[0]]
         console.log(arr2)
 ​
         const arr3 = [['孙悟空',18,'男'],['猪八戒',45,'男']]
         for(let stu of arr3){
             for(let v of stu){
                 console.log(v)
             }
         }
 ​
         let [[name,age,gender],obj] = arr3
         console.log(name,age,gender)
         console.log(obj)
     </script>

2、对象的解构

     <script>
         const obj = {name:'孙悟空',age:18,gender:'男'}
 ​
         // let {name,age,gender} = obj // 声明变量同时解构对象
 ​
         let name,age,gender
         ;({name,age,gender} = obj)//如果不加小括号的话,会被JS认为是代码块,但是加了小括号之后还需要添加分号,防止JS误认
 ​
         let {address} = obj;//没有的属性返回undefined
         console.log(name,age,gender,address)
 ​
         let {name: a,age: b,gender: c,address: d='花果山'} = obj
         console.log(a,b,c,d)
 </script>

3、对象的序列化

对象的序列化

  • JS中的对象使用时都是存在于计算机的内存中的

    • 序列化指将对象转换为一个可以存储的格式 在JS中对象的序列化通常是一个对象转换为字符串(JSON字符串)
    • 序列化的用途(对象转换为字符串有什么用):
    • 对象转换为字符串后,可以将字符串在不同的语言之间进行传递 甚至人可以直接对字符串进行读写操作,使得JS对象可以不同的语言之间传递
    • 用途: 1. 作为数据交换的格式 2. 用来编写配置文字
    • 如何进行序列化:

JSON

  • 在JS中有一个工具类 JSON (JavaScript Object Notation) JS对象表示法

  • JS对象序列化后会转换为一个字符串,这个字符串我们称其为JSON字符串

    • 也可以手动的编写JSON字符串,在很多程序的配置文件就是使用JSON编写的

    • 编写JSON的注意事项:

      1. JSON字符串有两种类型:

        JSON对象 {} JSON数组 []

      2. JSON字符串的属性名必须使用双引号引起来

      3. JSON中可以使用的属性值(元素)

        • 数字(Number)
        • 字符串(String) 必须使用双引号
        • 布尔值(Boolean)
        • 空值(Null)
        • 对象(Object {})
        • 数组(Array [])
      4. JSON的格式和JS对象的格式基本上一致的, 注意:JSON字符串如果属性是最后一个,则不要再加,

JSON.stringify()

可以将一个对象转换成JSON字符串

JSON.parse()

可以将一个JSON格式的字符串转换为JS对象

     <script>
         const obj = {
             name: '孙悟空',
             age: 13,
         }
 ​
         //将obj转换成JSON字符串
         const str = JSON.stringify(obj)//JSON.stringify() 可以将一个对象转换成JSON字符串
 ​
         const obj2 = JSON.parse(str) //JSON.parse() 可以将一个JSON格式的字符串转换为JS对象
 ​
         // console.log(obj)
         // console.log(str) // {"name":"孙悟空","age":18}
         // console.log(obj2)
 ​
         const str2 = `{'name': '孙悟空','age': '13'}`
         const str3 = '{}'
         const str4 = '["hello",true,[]]'
     </script>

image-20221208121318191