参考链接:http://es6.ruanyifeng.com/

const

声明一个只读的常量。

改变常量的值会报错。只声明不赋值也会报错。只在声明所在的块级作用域内有效。声明的常量不会提升,只能在声明的位置后面使用,否则会报错。重复声明会报错。

let

声明变量。用法类似于var,但所声明的变量只在let命令所在的代码块里有效。

var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
}
}
a[6](); //
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
}
}
a[6](); //

上面代码中,用var声明的变量i,在全局范围内有效,全局只有一个变量i,循环内被赋给数组a的函数内部的i指向的是全局变量i。所以数组所有成员里的i都指的同一个i,最后输出的是最后一轮的i的值,也就是10。

使用let声明的变量i,当前i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量。所以最后输出的是6。

块级作用域

ES6中的{}内是一个块级作用域。

块级作用域的出现,使立即执行函数表达式不再必要了。

//立即执行函数的写法
(function () {
var tmp = 123;
//一段代码
}) //块级作用域的写法
{
let tmp = 123;
//一段代码
}

函数的扩展

箭头函数

ES6允许使用箭头定义函数。

var f = v => v;

//等同于
var f = function (v) {
return v;
}

如果箭头函数不需要参数或需要多个参数,使用圆括号代表参数部分。

var f = () => 5;
//等同于
var f = function () {
return 5;
} var sum = (num1, num2) => num1 + num2;
//等同于
var sum = function (num1, num2) {
return num1 + num2;
}

如果箭头函数的代码块部分多余一条语句,就使用大括号把它们括起来,并且使用return语句返回。

var sum = (num1, num2) => {
return num1 + num2
};

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

var getObject = () => {a:1, b:2};    //报错

var getObject = () => ({a: 1, b: 2});    //不报错

箭头函数函数体内的this指向函数定义时所在的对象,而不是调用时所在的对象

var Factory = function () {
this.a = 'a';
this.b = 'b';
this.c = {
a: 'c.a',
b: function () {
return this.a;
}
}
}
console.log(new Factory().c.b()); //'c.a' var Factory = function () {
this.a = 'a';
this.b = 'b';
this.c = {
a: 'c.a',
b: () => this.a
}
}
console.log(new Factory().c.b()); //'a'

函数参数的默认值

ES6之前不能直接为函数的参数指定默认值,只能采用变通的方法。

{
//ES5/ES3的写法
function f(x, y) {
y = y || 7;
return x + y;
} console.log(f(1)); //
console.log(f(1, 3)); //
} {
//ES6写法
function f(x, y = 7) {
return x + y;
} console.log(f(1)); //
console.log(f(1, 3)); //
}

利用参数默认值,可以指定某一个参数不得省略,如果省略就抛出一个错误

{
function check() {
throw new Error('x参数不能为空');
} function f(x = check(), y = 7) {
return x + y;
} f(); //报错,x参数不能为空
}

rest参数(扩展运算符)

ES6引入rest参数,形式为...变量名。用于获取函数多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

{
//ES5可变参数
function f() {
var a = Array.prototype.slice.call(arguments);
var sum = 0;
a.forEach(function (item) {
sum += item;
});
return sum;
} console.log(f(1, 2, 3, 4)); //
}
{
//ES6
function f(...a) {
var sum = 0;
a.forEach(item=> {
sum += item;
});
return sum;
} console.log(f(1, 2, 3, 4)); // }

也可以这样应用

{
//ES5
var params = ['hello', true, 7];
var other = [1, 2].concat(params);
console.log(other); //[1, 2, "hello", true, 7]
}
{
//ES6
var params = ['hello', true, 7];
var other = [1, 2, ...params];
console.log(other); //[1, 2, "hello", true, 7]
}

Proxy(代理)

在目标对象之前架设一层拦截,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种可以对外界的访问进行过滤和修改的机制。以创建一个sex私有属性为例:

 {
//ES3
function Person() {
var data = {
name: 'es3',
sex: 'male'
}
this.get = function (key) {
return data[key];
}
this.set = function (key, value) {
if (key !== 'sex') {
data[key] = value;
}
}
} var person = new Person();
console.table({name: person.get('name'), sex: person.get('sex')});
person.set('sex', 'female')
person.set('name', 'es3+')
console.table({name: person.get('name'), sex: person.get('sex')});
//name的值改变了,sex的值没有变化
}
{
//ES5
var Person = {
name: 'es5',
};
Object.defineProperty(Person, 'sex', {
writable: false,
value: 'male'
});
console.table({name: Person.name, sex: Person.sex});
Person.name = 'es5+';
Person.sex = 'female';
console.table({name: Person.name, sex: Person.sex});
//name的值改变了,sex的值没有变化
}
{
//ES6
let Person = {
name: 'es6',
sex: 'male'
};
let person = new Proxy(Person, {
get(target, key){
return target[key];
},
set(target, key, value){
"use strict";
if (key !== 'sex') {
target[key] = value;
}
}
});
console.table({name: person.name, sex: person.sex});
person.sex = 'female';
person.name = 'es6+'
console.table({name: person.name, sex: person.sex});
//name的值改变了,sex的值没有变化 }

常用ES6语法总结的更多相关文章

  1. React Native中常用ES6语法

    一:模块导入导出 //ES6 import React, { Component, PropTypes, } from 'react'; import { Image, Text } from 're ...

  2. 常用ES6语法

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  3. 把JavaScript代码改成ES6语法不完全指南

    目录 * 核心例子 * 修改成静态变量(const)或块级变量(let) * 开始修改 * 疑问解释(重复定义会发生什么) * 疑问解释(let的块级作用域是怎样的) * 疑问解释(const定义的变 ...

  4. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  5. ES6语法知识

    let/const(常用) let,const用于声明变量,用来替代老语法的var关键字,与var不同的是,let/const会创建一个块级作用域(通俗讲就是一个花括号内是一个新的作用域) 这里外部的 ...

  6. es6语法快速上手(转载)

    一.相关背景介绍 我们现在大多数人用的语法javascript 其实版本是ecmscript5,也是就es5.这个版本己经很多年了,且完美被各大浏览器所支持.所以很多学js的朋友可以一直分不清楚es5 ...

  7. ES6语法的新特性

    ES6 就是ECMAScript 6是新版本JavaScript语言的标准.虽然目前已经更新到ES7,但是很多浏览器还不知处ES7语法,该标准仍在更新中,但目前部门网站都指出ES6的语法.目前ES6也 ...

  8. 前端项目中常用es6知识总结 -- Async、Await让异步美如画

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  9. 前端项目中常用es6知识总结 -- Promise逃脱回调地狱

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

随机推荐

  1. 刚安装了ftp之后无法使用root访问,服务器发回了不可路由的地址。使用服务器地址代替。

    真的艰辛,用了整整一个下午加晚上,才把服务器搭建好,中间真的好多坑... 错误1: vsftpd正确配置: vsftpd.conf: pam_service_name=vsftpduserlist_e ...

  2. oracle查询表空间的空间占用情况

    ,) percent_used from (select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespac ...

  3. shellcode 反汇编,模拟运行以及调试方法

    onlinedisassembler https://onlinedisassembler.com 在线反汇编工具,类似于lda.功能比较单一. Any.run 等平台在线分析 将shellcode保 ...

  4. IP multicast IP多播

    https://networklessons.com/multicast/multicast-routing/ IP多播有两种模式,密集模式和稀疏模式: Dense Mode Sparse Mode ...

  5. lwip nd没有实现ra,contik有参考

    lwip中关于nd的实现,没有路由器的功能,不能发送ra 在contiki中发现有nd发送ra的实现, contiki/core/net/ipv6/uip-ds6.c 在rs的接收处理中,发送soll ...

  6. bat常用符合和for语句等

    一.开头 @echo off(默认是echo on)@echo off执行以后,后面所有的命令均不显示,包括本条命令 二.特殊符号 1. | 命令管道符,echo Y|rd /s c:\abc,通过管 ...

  7. 杭电-------2052Picture(C语言)

    #include<stdio.h> int main() { int width, height; int i, j; while (~scanf("%d %d", & ...

  8. redis系列-开篇

    0x0 缘起 笔者所在的公司有一款大DAU(日活)的休闲游戏.这款游戏的后端架构很简单,可以简单理解为通讯-逻辑-存储三层结构.其中存储层大量使用了redis和mysql. 虽然存量用户的增加,red ...

  9. 前缀和&差分

    一:差分数组概念  一.差分数组的定义及用途 1.定义:对于已知有n个元素的数列d,建立记录它每项与前一项差值的差分数组f:显然,f[1]=d[1]-0=d[1];对于整数i∈[2,n],我们让f[i ...

  10. vscode自己常用的快捷键

    (1)快速复制一行 ctrl + alt +