zoukankan      html  css  js  c++  java
  • ES6

    变量的解构赋值

    数组的结构赋值

    jsES6允许按照一定的模式从数组和对象中提取值,对变量进行赋值

    1.模式匹配(只要等号两边的模式相同,左边的变量就会被赋予对应的值[按照从左到右的顺序])

     var [a,b,c] = [1,2,3] //a=1,b=2,c=3 
     var [foo,[[2],3]] = [1,[[2],3]] //a=1,b=2,c=3 
     let [head,...tail] = [1,2,3] //head = 1,tail = [2,3]
     let [x,y,...z] = ["a"] // x = "a",y = undefined,z=[]
     // 解构赋值不成功 (变量没有匹配到值)
     var [foo] = [] //foo = undefined
     var [bar,foo] = [1] //foo = undefined
     // 解构赋值不完全 (变量全匹配到,但是存在多余值)
     let [x,y] = [1,2,3] //x =1 ,y =2
     let [a,[b],d] = [1,[2,3],4] //a = 1,b = 2,d = 4
     // 默认值
     var [foo = true] = [] // foo = true
     var [x,y = "b"] = ["a"] // x = "a",y="b"
     var [x, y = "b"] = ["a",undefined] // x = "a",y = "b" ES6内部使用严格相等运算符(===)判断一个位置是否有值,在数组成员严格等于undefined 
     // 的时候,默认值会生效 null 不严格等于undefined
    

    对象的结构赋值(兑现的属性没有顺序,变量必须与属性同名)

     // 变量与属性同名
     var {foo,bar} = {foo:"aaa",bar:"bbb"} //foo = "aaa" bar = "bbb"
     // 变量与属性不同名时
     var {foo:baz} = {foo:"aaa",bar:"bbb"} //baz = "aaa" 对象的结构赋值,是先找到同名的属性,再把值赋值给对应的变量,真正被赋值的是后者
     // 嵌套对象 [模式右侧紧跟着{}]
     var obj = {
     p: [
     "Hello",{y:"world"}
      ]
     }
     var {p : [x,[y]]} = obj // p是模式 x = "Hello",y = "world"
     var node = {
     loc :{
     start :{
        line : 1,
        column : 5
       }
      }
     }
     var {loc:{start:{line,column}}} = node // loc和start都是模式
     // todos 失效情况 和 函数的解构赋值
    

    解构赋值的用途

     // 交换变量
     let x = 1;
     let y = 2;
     [x, y] = [y, x];
     // 从函数返回多个值
    
     // 返回一个数组
    function example() {
      return [1, 2, 3];
    }
    let [a, b, c] = example();
    
    // 返回一个对象
    function example() {
      return {
        foo: 1,
        bar: 2
      };
    }
    let { foo, bar } = example();
     // 函数参数的定义
     // 参数是一组有次序的值
    function f([x, y, z]) { ... }
    f([1, 2, 3]);
    
    // 参数是一组无次序的值
    function f({x, y, z}) { ... }
    f({z: 3, y: 2, x: 1});
     //提取 JSON 数据
     let jsonData = {
      id: 42,
      status: "OK",
      data: [867, 5309]
    };
    
    let { id, status, data: number } = jsonData;
    
    console.log(id, status, number);
    // 42, "OK", [867, 5309]
    
    //函数参数的默认值
     jQuery.ajax = function (url, {
      async = true,
      beforeSend = function () {},
      cache = true,
      complete = function () {},
      crossDomain = false,
      global = true,
      // ... more config
    } = {}) {
      // ... do stuff
    };
     // 输入模块的指定方法
    const { SourceMapConsumer, SourceNode } = require("source-map");
    
  • 相关阅读:
    多线程
    关于并发和并行
    文件系统
    java.util.Arrays类
    程序管理与SElinux
    用户和用户组管理总结
    useradd和adduser
    打印可见字符
    cmd中控制某个命令执行多少次
    keras模块之-优化器(optimizers)--笔记
  • 原文地址:https://www.cnblogs.com/rainbowqq/p/13466194.html
Copyright © 2011-2022 走看看