zoukankan      html  css  js  c++  java
  • ES6学习笔记(2)变量的解构和赋值

    参考书《ECMAScript 6入门》
    http://es6.ruanyifeng.com/

    变量的解构和赋值

    本质上:只要模式匹配,左边的变量就能被赋予右边对应的值

    原则: 解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null不能转化为对象,所以如果右边是undefined或者null,则会解构报错

    数组类型 :数组类型按照顺序匹配

    let [x,y,z] = [1,2,3]
    x = 1
    y = 2
    z = 3

    对象类型 :对象类型按照属性名匹配

    let {key1 : value1,key2 : value2} = {key2 : "v2",key1 : "v1"}
    value1 = "v1"
    value2 = "v2"

    字符串||数字||布尔类型

    let [a,b,c,d,e] = "admin"
    a = 'a'
    b = 'd'
    c = 'm'
    d = 'i'
    e = 'n'

    let {toLowerCase : method} = 'admin'
    method = String.prototype.toLowerCase

    let {toFixed : method1} = 3
    method1 = Number.prototype.toFixed

    let {toString : method2} = true
    method2 = Boolean.prototype.toString

    默认值
    a.只有当右边对应的赋值严格等于undefined时,左边变量才能取默认值
    b.惰性求值
    c.默认值可以引用其他已经解构的变量的值

    let [x = 1,y = 2] = [] //此时x的默认值是1,y的默认值是2  []等同于 [][0] = undefined,[][1] = undefined .....
    let [x = 1,y = 2] = [null,null] //只有当x,y的值是undefined的时候,才能把默认值给x,y,此处null 不等于 undefined ,所以x = null, y = null
    let {x = 3} = {x : undefined} // x = 3
    let {x = 3} = {x : null} //x = null

    function f(){
      return "abc";
    }
    let [x = f()] = [1]
    //此时x = 1,而不是会输出"abc",因为右边对应x变量的值是可以正常赋值的,所以不执行x =f()语句

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

    不完全解构 : 等号左边的模式只匹配一部分等号右边的值

    let [x,y] = [3] // x = 3 , y = undefined
    let {k1 : a, k2 : b} = {k2 : "123"} // a = undefined, b = "123"


    圆括号
        允许使用 : 赋值语句的非模式部分
        不允许使用
        a.变量声明
        b.函数参数
        c.赋值语句模式

    嵌套解构
        数组
        let [x, ...rest] = [1, 2, 3, 4];//x = 1 rest = [2,3,4]
        let [x,[y,z]] = [1,[2,3]] // x = 1, y = 2, z = 3
        对象
        let obj = {
            obj2: {
              k1 : 'v1',
              k2: 'v2'
            }
        };
        let { obj2, obj2: {k1 : x, k2 : y} } = obj;
        x // "v1"
        y // "v2"
        obj2 // {k1 : 'v1', k2 : 'v2'}

  • 相关阅读:
    quick-cocos2d-x游戏开发【5】——创建菜单
    cocos2d-x3.0 lua学习(一个)
    hdu 3001 Travelling (TSP问题 )
    朱重组成功,?(行家都知道,几乎回答)
    无人机DLG生产作业流程
    自己定制个人无人机需要的准备工作的内容
    C# 多线程网络爬虫
    [转] c#中 多线程访问winform控件
    C# WinForm中 让控件全屏显示的实现代码
    5.数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/carolddz/p/8513361.html
Copyright © 2011-2022 走看看