常用ES6特性

ES6,正式名称叫做ECMAscript2015,ES6这个名称更加简洁。ES6已经不再是JavaScript最新的标准,他已经广泛的用于实际编程中。对ES6常用的特性给一个总结。
ES6常用特性

  • 函数参数默认值
  • 模板字符串
  • 多行字符串
  • 结构赋值
  • 对象属性简写
  • Promise
  • let和const
  • class类
  • 模块化

1参数默认值

不使用ES6

为函数的参数设置默认值

function a(a,b){
  var a = a || ' ';
  var b = b || ' ';
}

这样写一般是没有问题的。但是当参数的布尔值为false时,就会出事情!!!比如这样调用

a(0,1)

因为0的布尔值为false,这样a就是空。你要在进行处理就很麻烦啦。但是使用ES6可以避过这些问题。

使用ES6

function a(a=' ',b=' '){
}

2模板字符串

不使用ES6

在不使用ES6的时候拼接字符串是一件很烦的事情。

var a = 'asd' + str + ' ' + obj + '.';

使用ES6

将变量放在大括号之中

var a = `asd${str}${obj}.`;

ES6的写法更加简单、明了。

3多行字符串

不使用ES6

在不使用ES6的时候换行必须要拼接上\n\t

var a = 'asdasdasdasdasda\n\t'+
        'asdasdasdasdasdasd\n\t'+
        'asdasdasdasdasdasdasd'

使用ES6

使用ES6就方便多啦

var a = `asdasdsadasdas
asdasdasdasda
asdasdasdasdsd`;

4解构赋值

不使用ES6

当需要获取某个对象的属性值时,需要单独获取

var data = $('body').data(); // data有house和mouse属性
var house = data.house;
var mouse = data.mouse;

使用ES6

一次性获取对象子属性

var {house,mouse} = $('body').data();

对于数组也是一样

var [a,b] = $('.arr');

5对象属性的简写

不使用ES6

对象中必须要有属性和属性值,显得很是多余

var a = 'a ';
var b = function(){}
var obj = {
     a:a,
     b:b
}

使用ES6

使用ES6会变得很简单

var a = 'a ';
var b = function(){}
var obj = {a,b};

6箭头函数

不使用ES6

普通函数的this,永远指向调用者。这个很奇怪,就会出现许多莫名的问题。

function foo() 
{
    console.log(this.id);
}

var id = 1;

foo(); // 输出1

foo.call({ id: 2 }); // 输出2

使用ES6

箭头函数中的this,就是定义时所在的对象,而不是调用时所在的对象

var foo = () => {
  console.log(this.id);
}

var id = 1;

foo(); // 输出1

foo.call({ id: 2 }); // 输出1

7Promise对象

不使用ES6

不使用ES6的时候,前端很容易陷入一个回调地狱,比如等这个AJAX调取完,再去调用另一个AJAX,就要基于回调,多个就会出现回调地狱。

setTimeout(function()
{
    console.log('Hello'); // 1秒后输出"Hello"
    setTimeout(function()
    {
        console.log('Fundebug'); // 2秒后输出"Fundebug"
    }, 1000);
}, 1000);

使用ES6

var wait1000 = new Promise(function(resolve, reject)
{
    setTimeout(resolve, 1000);
});

wait1000
    .then(function()
    {
        console.log("Hello"); // 1秒后输出"Hello"
        return wait1000;
    })
    .then(function()
    {
        console.log("Fundebug"); // 2秒后输出"Fundebug"
    });

8let和const

不使用ES6

不使用ES6的时候,js声明变量一般都在使用var,var会有一个变量提升的问题。

{
var a  = 10;
}
console.log(a); //10

使用ES6

let定义的变量是块级作用域,const定义的是常量。

{
let a = 10;
}
console.log(a); //报错

let和const都一样都是定于的块级作用域。

9class类

不使用ES6

不使用ES6的时候,是要使用构造函数定义一个类

function aa(x,y){
  this.x = x;
  this.y = y;
  this.add=function(){
    return this.x + this.y;
  }
}
var  p = new aa(1,2);
console.log(p.add()); //输出3

使用ES6

使用class定义类,更加规范,更加方便继承,写法更加偏向后台。

class aa{
     constructor(x,y){
        this.x = x;
        this.y = y;
    },
    add(){
      return this.x + this.y;
    }
}
var  p = new aa(1,2);
console.log(p.add()); //输出3

10模块化

JavaScript中是没有一个模块化的概念的,开发者在实践中主要采用common.js和AMD的规范。但是ES6中定义了模块的概念。
node.js中主要采用common.js规范实现模块化,而前端也可以采用。这里不妨介绍一下common.js的规范。
module.js中使用了module.exports导出a变量和getAjax方法:

module.exports = {
  a:100,
  getAjax (){   //ES6中对象定义方法简写
  }
}

main.js中使用require导入module.js:

var a= require('module.js')
console.log(a.port) // 输出100

使用ES6

ES6中使用export和import关键字来实现模块化。
module.js中使用了module.exports导出a变量和getAjax方法:

export var a = 100;
export function getAjax(){}

main.js中使用import导入module.js,可以指定需要导入的变量:

import {a, getAjax} from 'module'
console.log(a) // 输出100

也可以全局引入

import * as service from 'module'
console.log(service.a) //输出100
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容

  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,747评论 0 1
  • 定义函数 我们先来看一个基本的新特性,在javascript中,定义函数需要关键字function,但是在e...
    花开到咪兔阅读 295评论 1 3
  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 5,965评论 8 25
  • 以下内容是我在学习和研究ES6时,对ES6的特性、重点和注意事项的提取、精练和总结,可以做为ES6特性的字典;在本...
    科研者阅读 3,034评论 2 9
  • 电脑屏幕上的对话框一条接一条的刷着。我的朋友正火热的聊着,T说她的工资减少了,饭补没有了,难受着呢。我刚要抬手准备...
    BaebaeZoe阅读 348评论 0 0