ggggxc学习笔记----ES6笔记II----变量、解构、对象、数组

一、变量:let

介绍:在es5中,我们通常使用var声明一个变量,但是var有很多特性与常规的编程语言都不太相同,在es6中,又提供了与常规语言类似的声明变量的方法。let对比var有如下特点:

   (1)变量声明不会被提升,即在变量声明之前无法使用该变量

   (2)具有局部作用域,即let声明的变量只能在对应代码块中使用

   (3)不允许重复声明。

二、const:用于声明常量,与let具有相同的特性。

    其他特性:const声明的变量在声明的时候就需要赋值,并且只能赋值一次,不能修改。

三、解构(模式匹配)

介绍:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值等于undefined。

1.数组解构:等号左边的变量放到中括号内部,匹配右侧数组中的元素。

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

   不完全解构:

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

   集合解构:

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

   默认值(当匹配值严格等于undefined时,默认值生效):

let [x,y=’b’] = [‘a’];  //x=’a’,y=’b’;

   默认值也可以为函数:

let [a=myFun()] = [1]

2.对象解构:等号左边的变量放到大括号内部,匹配右侧数组中的元素。对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let { foo, bar } = { foo:"aaa", bar: "bbb” };  //foo = "aaa"; bar = "bbb"

如果变量名与属性名不一致,必须写成下面这样:

var { foo: baz}= { foo: 'aaa', bar: 'bbb'};  //baz = "aaa"

这说明,对象的解构赋值是下面形式的简写:

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };

嵌套解构:

let obj= { p: [ 'Hello', { y:'World' } ] };
let { p: [x, { y }] }= obj;   //x = "Hello" ; y = "World"

默认值(默认值生效的条件是,对象的属性值严格等于undefined):

var {x: y = 3}={};  

3.字符串解构

       等号左边的变量如果放在中括号内进行的类似于数组解构,从字符串中获取指定字符;如果放在大括号内进行的类似于对象解构,从实例属性获方法中解构。

let { foo, bar }= { foo: 'aaa', bar: "bbb' };  // foo = "aaa"; bar = "bbb"
const [a, b, c, d,e] = 'hello';  //a=h;b=e;c=l;d=l;e=o
let {length : len, toString } = 'hello';  //len = 5

这个例子与数组解构相区别:数组解构是从字符串里提取字符

let [a, b, c] = 'hello'; a='h' b='e' c='l'

与对象解构区别:对象解构是从字符串原型中解构属性和方法

let { length, toString } = 'hello'

 4.number解构

 let { valueOf } = 12;   //valueOf === Number.prototype.valueOf()

 5.boolean解构

  let { valueOf } = true;   //valueOf === Boolean.prototype.valueOf()

四、对象

介绍:ES6中规定可以直接在对象中写入变量和函数作为对象的属性和方法,此时属性名为变量名,属性值为变量的值。对象简写在未来的使用频率极其高。

var name= 'terry';
var foo= {
name,
sayName(){
console.log('my name is',this.name);
}
};

2.对象API拓展:ES6中对于Object的拓展主要是静态方法的拓展

   Object.is()     判断两个值是否一样

   Object.assign()  将所有可枚举属性的值从一个或多个源对象分配到目标对象

   Object.setPrototypeOf(obj1, obj2)  为目标对象设置原型

   Object.getPrototypeOf()  获取目标对象的原型

   Object.keys()     返回对象属性名组成的数组

   Object.values()   返回对象属性值组成的数组

   Object.entries()  返回对象[属性名, 属性值]组成的数组

五、数组

1.拓展运算符:使用 三个点’…’表示。好比rest参数的逆运算,将一个数组转为用逗号分割的参数序列。

      ...用在=左边,聚合的作用(对象、数组的结构)

      ...用在=右边,展开(剥离)的作用
      

  let obj1 = {
    name: '张三'
  }
  let obj2 = {
    ...obj1,
    age: 12
  }

2.数组API拓展

   Array.from()  将其他类型属性转成数组

   Array.of()    创建数组实例,实参就是数组的元素

   Array.prototype.find() 返回满足条件的第一个元素

   Array.prototype.findIndex() 返回满足条件的第一个元素的索引

   Array.prototype.includes()  判断当前数组中是否包含某个元素

   Array.prototype.fill()      填充数组(左右元素填充)

   Array.prototype.keys()      索引的迭代器对象

   Array.prototype.values()    元素的迭代器对象

   Array.prototype.entries()   键值对的迭代器对象

你可能感兴趣的:(ES6学习笔记,javascript,es6)