目錄:
  1. 申明
    1. let声明变量
      1. const申明常量
        1. 变量的解构赋值
          1. 数组的解构赋值:
            1. 对象的解构赋值:
              1. 字符串的解构赋值
                1. 函数参数的解构赋值
                  1. 用途举例

                  ES6学习笔记1(let、const及变量的解构赋值)

                  閱讀時間:全文 811 字,預估用時 5 分鐘
                  創作日期:2017-06-29
                  文章標籤:
                   
                  BEGIN

                  申明

                  阮一峰老师的ECMAScript 6学习笔记。

                  let声明变量

                  1. let申明的变量只在当前代码块中有效。
                  2. let申明变量不存在变量提升,一定遵循先声明后使用的原则。
                  3. 暂时性死区(temporal dead zone):当代码块中有let申明的变量,不管外部是否有此同名变量的其它申明,在此代码块中依然严格遵循先申明后使用的原则。由于此特性,变量的类型检测typeof将不再安全。
                  var tmp = 123;
                  if (true) {
                    tmp = 'abc'; // ReferenceError
                    let tmp;
                  }
                  1. 不允许重复申明。

                  const申明常量

                  1. const申明常量的同时必须立即赋值。
                  2. 一旦申明,常量的值不能改变。
                  3. const申明的常量只在当前代码块中有效。
                  4. 同let存在暂时性死区及不可重复申明的特性。
                  5. 本质 {% cq %}const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。{% endcq %}

                  变量的解构赋值

                  概念:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。只要某种数据结构可迭代,都可以采用数组形式的解构赋值。

                  数组的解构赋值:

                  let [a, [b, c], d] = [1, [2, 3], 4]; //a=1, b=2 ,c=3, d=4
                  let [ , , c] = [1, 2, 3]; //c=3
                  let [a, ...c] = [1, 2, 3]; //a=1, c=[2, 3]
                  let [a, b, ...d] = [1]; //a=1, b=underfined, c=[]
                  //默认值的使用,生效条件:数组的值对应严格等于undefined
                  let [a, b = 2] = [1]; //a=1, b=2
                  let [a, b = 2] = [1, undefined]; //a=1, b=undefined
                  let [a, b = 2] = [1, 3]; //a=1, b=3

                  对象的解构赋值:

                  let {a, b, c} = { a: 1, b: 2}; //a=1, b=2, c=unfefined
                  let {first: f, last: l} = {first: 'hello', last: 'world'}; //f=hello, l=world
                  let {p: [x, {y}]} = {p: ['hello', {y: 'world'}]}; //x=hello, y=world, p此时为模式不是变量
                  //默认值的使用,生效条件:对象的属性值严格等于undefined
                  let {x, y = 5} = {x: 1}; //x=1, y=5
                  let {x: y = 3} = {} //y=3
                  let {x: y = 3} = {x: 5} //y=5

                  将现有对象的方法,赋值到某个变量let {log, sin, cos} = Math

                  字符串的解构赋值

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

                  let [a, b, c, d] = 'hello' //a=h, b=e, c=l, d=l
                  let {length: ll} = 'hello' //ll=5

                  函数参数的解构赋值

                  function add([x, y]){
                      return x+y;
                  }
                  add([1,2]) //3
                  [[1, 2], [3, 4]].map(([a, b]) => a + b); //[3, 7]

                  用途举例

                  1. 交换变量的值。
                  2. 函数返回多个值。
                  3. 函数参数的定义。
                  4. 提取json数据。
                  5. 遍历Map解构。
                  var map = new Map();
                  map.set('first', 'hello');
                  map.set('second', 'world');
                  for (let [key, value] of map) {
                      console.log(key + " is " + value);
                  }
                  1. 提取模块的指定方法:const { SourceMapConsumer, SourceNode } = require("source-map");
                  FINISH

                  隨機文章
                  人生倒計時
                  default