zoukankan      html  css  js  c++  java
  • 原生JS---解构赋值

      好久没写博客了,惭愧惭愧。。。。。。今天来看一下解构赋值。

    解构赋值语法是一种JavaScript表达式,它使得将值从数组、或属性从对象,提取到不同的变量中,成为可能。

      (一)解构数组

        1.1 变量声明并赋值

        var foo = ["one", "two", "three"];
        var [one, two, three] = foo;
        console.log(one); // "one"
        console.log(two); // "two"
        console.log(three); // "three"

      1.2 变量先声明后赋值时的解构

        var  a,b;
        [ a,b ] = [ 1,2 ];
        console.log(a) //1
        console.log(b) //2

       1.3 默认值:为防止从数组重取出一个值为undefined的对象,可以再表达式左边的数组中为任意对象预设为默认值

         var a,b;
         [a = 5,b = 7] = [1];
         console.log(a) //1
         console.log(b)  //7

      1.4 解析函数的返回值---数组

        function f(){
            return [1,2,3,4];
        }
        [x,y,...z] = f();
        console.log(x) // 1
        console.log(y) //2
        console.log(z) // Array(2) [3,4]

       1.5 忽略某些返回值

        function f() {
            return [1, 2, 3, 4];
        }
        [x,, ...z] = f();
        console.log(x) // 1
        console.log(z) // Array(2) [3,4]

      1.6 将剩余数组赋值给一个变量(当解构一个数组时,可以使用剩余模式,将数组剩余部分赋值给一个变量)

        !!注意:剩余元素右侧不可有逗号,不然会抛出一个错误

        var [a,...b] = [1,2,3]
        console.log(a) // 1
        console.log(b) // [2,3]

      (二)解构对象

       2.1 基本赋值

        var o = {p:1,q:true};
        var {p,q} = o;
        console.log(p) // 1
        console.log(q) //true

      2.2 无声明赋值

        var a,b;
        ({a,b} = {a:1,b:2})
        console.log(a) // a
        console.log(b) // b

      2.3 给新的变量名赋值(我们可以从一个对象中提取变量并赋值给和对象属性名不同的新的变量名)

        var o = {p:1,q:false}
        var {p:bar,q:foo} = o;
        console.log(bar) //1
        console.log(foo) //false

      2.4默认值(变量可以先赋予相应的默认值。当腰提取的对象没有相应的属性时,变量就会被赋予默认值)

        var {a = 10,b = 5} = { a:3};
        console.log(a) // 3
        console.log(b) //3

       2.5给新的变量命名并提供默认值

    var {a:aa = 10,b:bb=100} = {a:3};
        console.log(aa) //3
        console.log(bb) //100

      2.6函数参数默认值

    function drawES2015Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) 
    {
      console.log(size, cords, radius);
      // do some chart drawing
    }
    
    drawES2015Chart({
      cords: { x: 18, y: 30 },
      radius: 30
    });

      如果你忽略了右边的赋值,那么函数会在被调用的时候查找至少一个被提供的参数,而在当前的形式下,你可以直接调用drawES2015Chart()而不提供任何参数。

      2.7解构嵌套对象和数组

    const metadata = {
      title: 'Scratchpad',
      translations: [
        {
          url: '/de/docs/Tools/Scratchpad',
          title: 'JavaScript-Umgebung'
        }
      ],
      url: '/en-US/docs/Tools/Scratchpad'
    };
    
    let {
      title: englishTitle, // rename
      translations: [
        {
           title: localeTitle, // rename
        },
      ],
    } = metadata;
    
    console.log(englishTitle); // "Scratchpad"
    console.log(localeTitle);  // "JavaScript-Umgebung"

      2.8 For of 迭代和解构 

    var people = [
      {
        name: 'Mike Smith',
        family: {
          mother: 'Jane Smith',
          father: 'Harry Smith',
          sister: 'Samantha Smith'
        },
        age: 35
      },
      {
        name: 'Tom Jones',
        family: {
          mother: 'Norah Jones',
          father: 'Richard Jones',
          brother: 'Howard Jones'
        },
        age: 25
      }
    ];
    
    for (var {name: n, family: {father: f}} of people) {
      console.log('Name: ' + n + ', Father: ' + f);
    }
    
    // "Name: Mike Smith, Father: Harry Smith"
    // "Name: Tom Jones, Father: Richard Jones"
  • 相关阅读:
    今天玩wow的时候遇到的事,汗!
    EF4.0数据DateTime2数据类型错误
    在64位windows server 2003的IIS6上运行32位的.NET程序
    CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”“拒绝访问
    [转]网银支付接口编程资料汇总
    [转]Asp.Net MVC之ViewData字典与ViewModel模式
    MVC3小技巧
    MVC3+Spring.net+NHibernate+ExtJs的简单架构
    我的程序之路 asp.net 接触二年,工作一年总结 (2) lcs
    ASPXspy2.aspx lcs
  • 原文地址:https://www.cnblogs.com/zero18/p/10950987.html
Copyright © 2011-2022 走看看