zoukankan      html  css  js  c++  java
  • 解构赋值

    对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构( Destructuring )。

    为什么要用解构赋值?

      想从对象中取出名字为指定名称的属性,使用 for in 加 if 判断再赋值很麻烦,并且若有一个 嵌套的数据结构 则需要遍历寻找所需要而挖掘整个结构,而解构赋值可以直接获取:

      ex:

        对象

         let { x, y, ...z }=  { x: 1, y: 2, a: 3, b: 4 }

         console.log(x, y, z)  => 1,  2,  { a: 3, b: 4 }

        z是结构赋值所在对象,获取等号右边所有尚未读取的键,连同值一起拷贝过来

         数组

         var [a, b, c] =  [1, 2, 4]; // a = 1, b = 2, c = 4

         只要两边的模式相同,就能正确地赋值

      ex:

       let [a, [b,c]] = [1,[2,3]];// a = 1, b = 2, c = 3

       let [, , c] = [1,2,3];// c = 3

       let [c] = [1,2,3];// c = 1

       let [a,c] = [1]; // a = 1, c: undedined

       默认值可以引用解构赋值的其他变量,但该变量必须已经声明:

        let [x = 1, y = x] = []; // x=1; y=1

        let [x = 1, y = x] = [2]; // x=2; y=2

        let [x = 1, y = x] = [1, 2]; // x=1; y=2

        let [x = y, y = 1] = []; // ReferenceError

       由于解构赋值要求等号右边是一个对象或数组,所以如果等号右边是undefinednull,就会报错,因为它们无法转为对象。  

       ex:

         报错:

          let { ...z } = null; // 运行时错误

         let { ...z } = undefined; // 运行时错误

         let [foo] = NaN

         let [foo] = undefined

        字符串:字符串被转换成了一个类似数组的对象

          1.  let [a,b,c] = 'abc';

            console.log(a,b,c);// a=a,b=b,c=c

          2. let {length:len} = 'hello';

            console.log(len);// 5


        数值和布尔值:(如果等号右边是数值和布尔值,则会先转为对象)

          
    let {toString: s} = 111;
          s === Number.prototype.toString // true
           let {toString: s} = true;
           s === Boolean.prototype.toString // true
  • 相关阅读:
    贝塞尔曲线
    那些有内容的文章——记录网址
    Mac 下 SVN 的使用
    让时间不再随系统设置而改变
    iOS 关闭图片渲染
    iOS的AssetsLibrary框架访问所有相片
    iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
    Linux 第一次学习笔记
    java第四次实验报告
    java第三次实验报告
  • 原文地址:https://www.cnblogs.com/Z_66/p/15048011.html
Copyright © 2011-2022 走看看