ES6

先上文档地址:ES6入门

Babel

配置Babel,首先安装Babel,再建立项目文件夹,根目录下创建.babelre文件,基础配置:

{
    "presets": [
        "es2015",
        "react",
        "stage-2"
    ],
    "plugins": []
}

再用终端在文件夹下初始化npm,创建package.json:

npm init

然后运行:

sudo  npm install babel-preset-env --save-dev

babel配置完成,现在还需要手动转换,自动转换要设置监听

转换命令:

babel ./ssa.js --out-dir ./dist

可以写入package.json

{
    "name": "es6_practice",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "build": "babel ./*.js --out-dir ./dist"
    },
    "author": "dawn",
    "license": "ISC",
    "devDependencies": {
        "babel-preset-es2015": "^6.24.1"
    }
}

之后运行即可完成转换

npm run build

ES6语法

  • let:块级作用域!!!没有变量提升!!!不用多BB跟C语言一毛一样
  • const:常量

默认值

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

变量解构

function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();

// 返回一个对象

function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();



// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);

// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});




$('#result').append(`
  There are <b>${basket.count}</b> items
   in your basket, <em>${basket.onSale}</em>
  are on sale!
`);

箭头函数

   // ES5
    var selected = allJobs.filter(function (job) {
      return job.isSelected();
    });
    // ES6
    var selected = allJobs.filter(job => job.isSelected());

简化版的匿名函数
箭头前是参数列表,箭头后为返回值表达式.

模块化

核心关键字: export import
export 用于在独立文件中向外部抛数据

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

无法通过export直接向外部抛一个数值,应对向外抛接口

// 报错
export 1;

// 报错
var m = 1;
export m;
// 正确写法一
export var m = 1;

// 正确写法二
var m = 1;
export {m};

// 正确写法三
var n = 1;
export {n as m};

函数

函数的默认参数

function makeRequest(url, timeout = 2000, callback = function(){}){
// url必须传入
}

非原始值传参

function getVaule(){
    return 5;
}
function add(first,second = getVaule()){
    return first+second;
}
add(1,1)  ==>2
add(1) ===>6
如果不传入第二个参数就调用getVaule()

不定参数

fuction pick(object, ...keys){
    let result = Object.create(null);
    for (let i=0,len = key.length; i< len;i++){
        result[keys[i]] = object[keys[i]];
    }
    
}


8012年了啊,你咋还在学ES6啊( 'ω')
  • 用let进行变量声明的时候会出现临时死区,同C没啥好说的

字符串(以下方法均为字符串方法)

  • codePointAt();返回字符串对应编码单元上的码位。

  • charCodeAt();返回字符串对应编码单元上的一个编码单元。

  • normalize();对参数字符串进行Unicode标准化。

  • repeat();传入一个数字N,返回字符串N次循环拼接成的字符串。

  • includes();如果在字符串中检测到指定文本则返回true。

  • startsWith();如果在字符串的起始位置检测到指定文本则返回true。

  • endsWith();如果在字符串的结束部分检测到指定文本则返回true。

上边三个方法都可以接受第二个参数用以指定起始位置的偏移量或结束位置的偏移量。

函数

  • ES6中可以通过在函数声明的时候function(a = 10,b = ‘sss’)这样的形式进行默认参数设置
  • 用于创造对象的临时构造函数 var add = new function (“first”,”second ”,”return first+second”);
  • ES6中函数有两个内部方法[[Call]]和[[Construct]],当通过new关键字调用函数时执行的是[[Construct]]其负责创建一个实例对象,然后执行函数体并且把this绑定到实例上。直接调用函数则使用[[Call]]函数直接执行函数体。函数内可以通过new.target来判断函数被以何种方式调用,其值为new操作目标则为构造调用,为undefined则为常规调用
  • 箭头函数没有this,super,arguments,new.target,的绑定所以上下文与其父级属性相同
  • ES6进行了尾调用优化,需满足:调用函数不是闭包。return语句在函数末尾。尾调用结果作为函数值返回。

对象

  • 通过setPortotypeof()改变对象的原型参数。
  • 通过Super()获取对象原型的上下文
  • 收回之前 Object.definProperty()没卵用的话,在ES6中使此函数可以修改Symbol.hasInstence 等不可写属性(第三个参数传入value:function(v)return false;)以达到一些目的
  • 去重集合set(),默认强引用,WeakSet()弱引用
  • 属性名不会被强转的键值对集合

迭代器和生成器

  • 迭代器传参
function *createIterator(){
     console.log('000');
    let one = yield 1;
    console.log('1111');
    let second = yield one + 2;
    console.log('222');
    yield second +3;
}
let text = createIterator();
console.log(text.next());
console.log(text.next(4));
console.log(text.next(5));
console.log(text.next());
//结果:
000
{ value: 1, done: false }
1111
{ value: 6, done: false }
222
{ value: 8, done: false }
{ value: undefined, done: true }

 

迭代器的执行顺序为第N此执行会调取第N-1次yield语句的执行结果,并执行N-1个yield行到第N个yield行间的代码,输出结果为yield右侧语句结果。
而在调用next()函数时传递的参数用于代替N-1次yield的返回值,即N-1个yield和其右侧部分的代码。

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

推荐阅读更多精彩内容

  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,768评论 0 1
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 1,969评论 0 4
  • *node下用express框架,实现一个简单的mvc *构建工具:gulp / babel / webpack ...
    韩娜爱吃辣_前端程序媛阅读 1,081评论 0 1
  • 红色皇后理论是美国生物学家凡瓦伦提出的(Leigh Van Valen),这个奇怪的词来自英国数学家刘易斯•卡罗尔...
    纯莹一一北原莹子阅读 1,034评论 2 0
  • 什么是幸福? 身体棒棒的,有充足的时间与精力做自己喜欢做的事情,且对未来充满了希望。这时的状态就是幸福! 幸福带来...
    w小郭阅读 115评论 0 0