es6【摘抄自网络】

ES6

letconst只能定义变量一次,避免重复定义带来的问题;

letconst会被锁定在声明的代码块{}内,成为暂时性死区(Temporal Dead Zone);

letconst两个代码块中拥有各自的变量n,不会相互影响。

例子:

function f1() {

    let n = 5;

    if (true) {

      let n = 10;

      console.log(n); //输出 10

    }

    console.log(n); // 输出 5                                   

  }

let声明不存在变量提升

所谓变量提升,就是之前我们在使用var声明变量时,变量可以放在声明之前使用,只不过使用还没有声明的变量时,其值为undefined。但是使用let声明变量时,如果使用放在声明之前则会报错。

const除了拥有let的所有优秀特性(不允许重复声明,有用块级作用域)之外,还有一个特性,那就是它是只读的。

  "use strict";
  const s = [5, 6, 7];
  s = [1, 2, 3]; // 报错
  s[2] = 45; // 正常工作
  console.log(s); // returns [5, 6, 45]

sole.log(s); // returns [5, 6, 45

我们将一个新数组[1, 2, 3]赋值给变量s时,其实是企图改变变量s内指针的指向,而因为变量s是使用const命令声明的,其指针指向是固定的,不能变动的,所以程序报错。第二次,我们想修改数组中第二项的值,因为修改数组中某一项的值并不改变数组的地址,变量s内所保存的指针依旧指向原来的地址,所以程序可以成功执行。

⑥Object.freeze(保证复合型数据只可读)

  let person = {
    name:"XiaoMing",
    review:"yes"
  };
  Object.freeze(person);
  person.review = "no"; //这条命令将会被忽略,因为此时person对象是只读的
  person.newProp = "age"; // 这条命令也将会被忽略
  console.log(obj); 
  // { name: "XiaoMing", review:"yes"}

⑦箭头函数 (Arrow Functions)

例子:

  const myFunc = function() {

    const myVar = "value";

    return myVar;

  }

const myFunc = () => "value"

 

箭头函数可以传参:

const doubler = (item) => item * 2;

⑧为函数的参数设置默认值

function greeting(name = "Anonymous") {

    return "Hello " + name;

  }

  console.log(greeting("John")); // 输出 Hello John

  console.log(greeting()); // 输出 Hello Anonymous

⑨rest 参数 (Rest Operator)

function howMany(...args) {

    return "You have passed " + args.length + " arguments.";

  }

  console.log(howMany(0, 1, 2)); // 传入三个参数

  console.log(howMany("string", null, [1, 2, 3], { })); // 传入四个参数

⑩扩展运算符 (Spread Operator)

扩展运算符其实就是rest参数中的那三个点...,其作用是将数组打散:

  console.log(...[1, 2, 3])

  // 1 2 3

  console.log(1, ...[2, 3, 4], 5)

  // 1 2 3 4 5

  [...document.querySelectorAll('div')]

  // [<div>, <div>, <div>]

求最大值

  const arr = [6, 89, 3, 45];

  const maximus = Math.max(...arr); // 返回 89

⑪ 解构赋值(Destructuring Assignment)

ES5

  var voxel = {x: 3.6, y: 7.4, z: 6.54 };

  var x = voxel.x; // x = 3.6

  var y = voxel.y; // y = 7.4

  var z = voxel.z; // z = 6.54

ES6

const { x, y, z } = voxel; // x = 3.6, y = 7.4, z = 6.54

 

⑫ 模板字符串 (Template String)【用反引号( ` )标识】

  const person = {

    name: "Zodiac Hasbro",

    age: 56

  };

 

  //用模板字符串方式书写的字符串,并将其赋给greeting变量

  const greeting = `Hello, my name is ${person.name}!

  I am ${person.age} years old.`;

 

  console.log(greeting);

  // 输出:

  // Hello, my name is Zodiac Hasbro!

  // I am 56 years old.

在上面这段代码中,有三个地方需要我们注意:

1.模板字符串的标识符是反引号(`) 而不是单引号(')

2.输出的字符串是多行的,我们在也不需要\n了

3.语法${}可以用来获取变量,化简了之前用+来进行字符串拼接的写法

⑬ class语法糖

 

⑭ 用取值函数和存值函数(getters and setters)来封装对象

 

延伸:

Typeof用于检测一个变量的类型,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。

示例

console.log(typeof a);    //'undefined'

console.log(typeof(true));  //'boolean'

console.log(typeof '123');  //'string'

console.log(typeof 123);   //'number'

console.log(typeof NaN);   //'number'

console.log(typeof null);  //'object'    

var obj = new String();

console.log(typeof(obj));    //'object'

var  fn = function(){};

console.log(typeof(fn));  //'function'

console.log(typeof(class c{}));  //'function'

 

 

 

 

posted @ 2019-07-17 18:00  阿云爱吃福鼎肉片  阅读(137)  评论(0编辑  收藏  举报