参考链接: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. partition show for oracle version

    Dear all You may remember that my blog has a view script for checking sqlserver partition tables. No ...

  2. 第3章 JDK并发包(一)

    3.1 多线程的团队协作:同步控制 3.1.1 synchronized的功能扩展:重入锁 重入锁可以完全替代synchronized关键字. 重入锁使用java.util.concurrent.lo ...

  3. 自动化测试用例中的raise

    1.一次自动化测试学习中,expect异常中包含“raise e”,这是什么意思呢? 2.网上查了一下,大概意思是:若有异常,不会执行一下的操作,但是明明是语句后确实没有其他语句呀. 3.注释掉之后, ...

  4. Apache Tomcat Ajp-CVE-2020-1938漏洞复现

    环境搭建: sudo docker pull duonghuuphuc/tomcat-8.5.32 sudo docker run -d -it -p 8080:8080 -p 8009:8009  ...

  5. Ant Design Vue Pro 项目实战-项目初始化(一)

    写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ...

  6. 01 web api接口

    WEB API接口 接口介绍 接口概念:前台与后台进行信息交互的媒介 - url连接 https://api.map.baidu.com/place/v2/search 接口组成: url链接 - 长 ...

  7. 《自拍教程24》在Windows上配置环境变量

    我们说的环境变量,一般是指的是Path环境变量. 第一步:点击"我的电脑",右键,"属性" 第二步:点击"高级系统设置",弹出的窗口选&qu ...

  8. [CSGO]跑图CFG

    bot_kick //剔除所有电脑 sv_cheats 1 //允许作弊指令 bot_stop 1 //bot静止 mp_warmup_end //结束热身时间 mp_freezetime 0 //开 ...

  9. Hadoop搭建record下

    前言 先说一下当前环境:Ubuntu18.04 jdk1.8 Hadoop选用-2.6.0-cdh5.15.1 用户名:supershuai-VirtualBox Hadoop的下载地址:http:/ ...

  10. CSS中的vertical-align属性

    1,vertical-align属性的作用? 设置元素垂直对齐的方式: 2,该属性使用过程的注意点: 与text-align属性不同,text-align属性是设置给需要对齐元素的父元素的, 而ver ...