精华内容
下载资源
问答
  • es6 阮一峰

    2018-04-08 16:37:38
    es6 阮一峰 ecmascript6 ecmascript6 ecmascript6 ecmascript6
  • ES6 阮一峰

    2018-04-03 11:31:47
    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
  • es6 阮一峰 epub

    2017-08-14 15:11:25
    《ECMAScript 6 入门》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。
  • 书的全部内容就像介绍ES6的使用手册或文档,按照主题介绍语法细节,然后附带一两个简单代码示例。没有任何的实战项目示例,代码长度都很短。只为讲述单个例子。不同章节内容除非在语法上有联系(比如Promise-...

    前段时间读完了这本书,算是作为ECMAscript的入门。我读的是这本书的官方开源版本(免费正版哦)。

    开源地址:

    https://es6.ruanyifeng.com/

    2438863b55733a8098c9abc676b368c4.png

    书的全部内容就像介绍ES6的使用手册或文档,按照主题介绍语法细节,然后附带一两个简单代码示例。没有任何的实战项目示例,代码长度都很短。只为讲述单个例子。不同章节内容除非在语法上有联系(比如Promise-Generator-async),否则不同的章节内容基本不相关。

    阅读这本书要求有ES5的基础,书中默认读者已经掌握了ES5的大部分语法,大部分情况下不会再描述。阅读本书甚至要求读者有一点ES6的知识。书中前面部分会出现还没讲到的,后面章节才会教授的ES6语法。如果读者从来都没有接触过ES6,可能会有点看不懂。

    恰好,我是基本符合这本书的阅读条件的,之前学过一些ES5,而且平时对ES6也偶尔有接触。有了前面的阅读前提下,书的内容写的比较好,读起来挺容易懂的,我觉得比MDN的文档更容易读懂,也更适合学习。

    这本书的还有一个优势在于:
    书本身是开源的,更新速度很快。在书中不仅能看到ES6的语法,还能看到ES2016,ES2017,甚至我好像还看到有ES2019的内容。传统的纸质书籍中,速度肯定是没这么快的。传统的纸质书先要作者写书,再出版社出版,最快至少也要一年时间。而且书出版之后更新没这么快,一般几年才会更新下一版,如果读者在更新前买到书,意味着读到的是落后几年的内容。Web前端的更新速度非常快,几年时间书的内容可能就过时了。(市场上很大一部分前端书都是过时的)
    因此感谢作者开源书籍,我不仅没有花钱,而且还能读到很新的内容。

    通过上面的观点(章节相关性小,容易读懂,专注ES6,及时更新等),我觉得这是一本比较好的ES6工具书,不仅适合有前端基础的人阅读,而且适合平时作为ES6的语法手册使用。

    注:书评是我个人的读后感,包含了很多我的主观意见,不一定与其他人意见相似。

    展开全文
  • ES6阮一峰入门教程

    千次阅读 2020-01-08 10:22:37
    地址为: https://es6.ruanyifeng.com/

    地址为:
    https://es6.ruanyifeng.com/

    展开全文
  • es6阮一峰读后感

    2019-03-19 17:12:00
    不经意间看了你一眼(阮一峰es6读后感)我自己常用的 字符串篇:ES6 为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历。只要有遍历器接口的都可以用es6 的for of去遍历代替...

    不经意间看了你一眼(阮一峰的es6读后感)我自己常用的


    字符串篇:
    ES6 为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历。
    只要有遍历器接口的都可以用es6 的for of去遍历代替es5的forEach 和 for...in 这里就得引导出forin for of区别

    魔板字符串,includes


    函数篇:
    箭头函数

    ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。一看就知道这个参数是不是必传的了

    function log(x, y = 'World') {
      console.log(x, y);
    }
    
    log('Hello') // Hello World
    log('Hello', 'China') // Hello China
    log('Hello', '') // Hello
    通书移动


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

     

     

    解构赋值篇:

    let [a, b, c] = [1, 2, 3];  一一对应,找不到就是undefined

    let { bar, foo } = { foo: "aaa", bar: "bbb" };
    foo // "aaa"
    bar // "bbb"
    
    let { baz } = { foo: "aaa", bar: "bbb" };
    baz // undefined


    数组篇:
    findIndex方法很实用
    Arrary.from将类数组转换为真数组
    includes方法
    [1, 2, 3].includes(2)     // true
    [1, 2, 3].includes(4)     // false
    [1, 2, NaN].includes(NaN) // true

    对象篇:
    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

    Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。



    Proxy(代理对象)

    Promise承诺
     
     

    转载于:https://www.cnblogs.com/myfirstboke/p/10559906.html

    展开全文
  • 想要详细学习的同学可以点击下面的链接:AMDCMD阮一峰CommonJS规范学习首先AMD和CMD是用于浏览器的模块规范:AMD和CMD的区别:1、AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块2、CMD推崇就近依赖,只...

    ccf4b47c6a58a36519e2bf52275010d1.png

    前言

    本文主要学习四种模块加载规范:

    • AMD
    • CMD
    • CommonJS
    • ES6 module语法

    其中AMD,CMD,CommonJs不会详细学习,只是学习下它们的概念,做一些比较。

    想要详细学习的同学可以点击下面的链接:

    AMD

    CMD

    阮一峰CommonJS规范学习

    首先AMD和CMD是用于浏览器的模块规范:

    AMD和CMD的区别:

    1、AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块

    2、CMD推崇就近依赖,只有在用到某个模块的时候再去require

    AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同:

    AMD 是将需要使用的模块先加载完再执行代码,而 CMD 是在 require 的时候才去加载模块文件,加载完再接着执行。

    CommonJS 与 AMD

    引用阮一峰老师的《JavaScript 标准参考教程(alpha)》:

    CommonJS 规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
    AMD规范则是非同步加载模块,允许指定回调函数。
    由于 Node.js 主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以 CommonJS 规范比较适用。
    但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用 AMD 规范。

    ES6与CommonJS的差异:

    在阮一峰老师的ECMAScript6 教程 中有解释:

    它们有三个重大差异。

    CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
    CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
    CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。

    第二个差异是因为 CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。

    下面重点了解的是第一个差异:

    CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。

    example1:

    let current = 1;
    function addCurrent() {
      current++
    }
    module.exports = {
      current: current,
      addCurrent: addCurrent
    }
    
    //在文件中引入
    let num = require('./Democlass.js');
      console.log(num.current) //1
      num.addCurrent();
      console.log(num.current);//1
    

    从上面的例子中我们看到,两次输出的结果是一致的,current的值并未改变,这是为什么呢?

    这是因为num.current是一个基本类型的值,会被缓存。

    如果按照这种写法我们该怎么获取它改变之后的值呢?

    把它写成一个函数,每次返回它的值。

    //这里就直接写改变之后的导出对象了
    module.exports = {
      get current() {
        return current
      },
      addCurrent: addCurrent
    }
    

    那么我们这时就会有一个疑问,如果是引用类型的值呢?是不是还是相同的值,不受影响?

    let current = {
      name:'白茶'
    };
    function addCurrent() {
      current.name='爱喝茶'
    }
    module.exports = {
      current: current,
      addCurrent: addCurrent
    }
    
    let num = require('./Democlass');
      console.log(num.current) //{name: "白茶"}
      num.addCurrent();
      console.log(num.current);//{name: "爱喝茶"}
    

    上面的结果是会发生改变的,这是因为对于基本数据类型而言是 "值的拷贝",只是对于引用类型而言,值指的其实是引用。

    下面我们将这个例子改为ES6的引入方式看下:

    let current = 1;
    let obj = { name: '白茶' };
    function addCurrent() {
      current++;
      obj.name = '爱喝茶';
    }
    export {
      current,
      obj,
      addCurrent
    }
    
    import { current, obj, addCurrent } from './data.js';
    console.log(current);//1
    console.log(obj);//{name: "白茶"}
    addCurrent();
    console.log(current);//2
    console.log(obj);//{name: "爱喝茶"}
    

    可以看出上面的结果都发生了变化,这是为什么呢?

    ES6 模块的运行机制与 CommonJS 不一样。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。换句话说,ES6 的import有点像 Unix 系统的“符号连接”,原始值变了,import加载的值也会跟着变。因此,ES6 模块是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块。

    上面讲了下es6和CommonJS模块输出的不同,下面就主要的学习下ES6中的知识:

    传送门:阮一峰大大ES6学习指南

    严格模式

    ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";

    严格模式主要有以下限制:

    • 变量必须声明后再使用
    • 函数的参数不能有同名属性,否则报错
    • 不能使用with语句
    • 不能对只读属性赋值,否则报错
    • 不能使用前缀 0 表示八进制数,否则报错
    • 不能删除不可删除的属性,否则报错
    • 不能删除变量delete prop,会报错,只能删除属性delete global[prop]
    • eval不会在它的外层作用域引入变量
    • evalarguments不能被重新赋值
    • arguments不会自动反映函数参数的变化
    • 不能使用arguments.callee
    • 不能使用arguments.caller
    • 禁止this指向全局对象
    • 不能使用fn.callerfn.arguments获取函数调用的堆栈
    • 增加了保留字(比如protectedstaticinterface

    上面这些限制,模块都必须遵守。由于严格模式是 ES5 引入的,不属于 ES6,所以请参阅相关 ES5 书籍,本书不再详细介绍了。

    其中,尤其需要注意this的限制。ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this

    export命令

    一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。

    几种常见的写法:

    //输出多个变量
    export let a = 1;
    export let b = 2;
    //等同于下方
    export {a,b};
    
    //输出函数
    export function demo(){return 1};
    //等同于
    function demo(){return 1};
    export {demo};
    

    as关键字重命名

    function demo(){return 1};
    export {demo};
    
    //如果我们想要把对外输出的命名修改下,就可以使用as进行操作
    function demo(){return 1};
    export {demo as demo2};//demo 是我们的函数名称,demo2是我们修改后的名称
    

    import命令

    使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

    下面介绍几种常用的写法:

    function demo(){return 1};
    let a =1;
    let b =2;
    export {demo,a,b};
    
    import {demo} from './demo.js';
    
    //import中也有as关键字,同样也是修改命名
    import {demo as demo2} from './demo.js';
    
    //修改全部命名
    import * as num from './demo.js';
    console.log(num.a);//1
    //这里的num就是导入的全部模块变量,是一个对象
    

    export default 命令

    使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载,这里的export default命令,就是为模块指定默认输出。

    example1:

    //第一种写法
    export default function () {
      return 'demo';
    };
    //第二种写法
    function demo(){return 'demo'};
    export default demo;
    //引入函数引用
    import foo from './demo.js';
    console.log(foo()) // demo
    
    //这种写法是错误的
    export default const a = 1;
    

    从上面的例子中我们看到,我在使用export命令导出的demo函数,在引用的时候,使用的命名是foo但是还是可以执行函数,并且输出正确的值。这是为什么呢?

    原因:

    export default就是输出一个叫做default的变量或方法,然后系统允许你为它取任意名字。export default命令的本质是将后面的值,赋给default变量

    赋给default变量这句话让我们举例子解释下,更清楚一点:

    function demo(){return 'demo'};
    export default demo;
    
    • 首先声明了一个函数demo,紧接着使用了export default命令
    • 这里并不是把demo函数输出了,而是进行了赋值,default = demo;

    下面是export default 命令的几个注意的地方:

    export default命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出,因此export default命令只能使用一次。
    因为export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。

    参考文章:

    ES6 入门教程

    https://github.com/mqyqingfeng/Blog/issues/108

    展开全文
  • ES6 阮一峰阅读学习

    2018-09-25 23:38:00
     但是ES6里这个只能当成局部变量用...好想并没啥用...   三、变量的解构赋值 1.1 什么是解构? ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。 let a ; let b ; [a,b] =...
  • 概述文章参考阮一峰大佬的ES6标准入门:http://es6.ruanyifeng.com/#docs/reflectReflect 对象与 Proxy 对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect 对象的设计目的有这样几个。1, 将 Object 对象的...
  • b.constructor === B.prototype.constructor // true本文,参考阮一峰的文章,地址如下:https://es6.ruanyifeng.com/#docs/class 如果喜欢这篇文章,可以支持一下哟,分享、点赞、在看走一个,哈哈@_@更多文章,请...
  • Class 学习 (Es6阮一峰)

    2018-12-05 20:00:00
    私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现 。 有三种方法可模拟 // 第一种 class Widget { // 公有方法 foo (baz) { this ._bar(baz); } // 私有方法 _bar(baz) { ...
  • export:用于规定模块的对外接口(分别针对输出变量、方法做出代码示例) 总结: 方式一跟方式二的区别在于方式二使用大括号指定所要输出的一组变量。它与方式一的写法(直接放置在var语句前)是等价的,但是应该...
  • 文字版:https://jscode.me/t/es-6/109阮一峰的教程:http://es6.ruanyifeng.com目前没有找到比较全的 ES 6 新特性汇总(中文),于是就自己花了一下午收集了一下,不说 100% 全面,也至少收录了 90% 的新特性。这样...
  • function Obj(value) { this.value = value; this.next = null; } Obj.prototype[Symbol.iterator] = function() { var iterator = { next: next }; var current = this; function next() { if (cu...
  • ES6入门 阮一峰 第二版ES6入门 阮一峰 第二版ES6入门 阮一峰 第二版ES6入门 阮一峰 第二版
  • ES6教程阮一峰

    2020-08-15 19:10:25
    … 为ES6的扩展运算符 其他ES6的特性,参见阮一峰ES6的入门教程 ES6入门教程 https://es6.ruanyifeng.com/
  • ES6-阮一峰

    2020-03-07 14:09:07
    https://es6.ruanyifeng.com/
  • ES6入门 阮一峰

    2019-08-01 16:53:00
    ECMAScript 6 入门 http://es6.ruanyifeng.com/#README 转载于:https://www.cnblogs.com/miangao/p/11283729.html
  • ES6笔记上(深入浅出ES6阮一峰

    万次阅读 多人点赞 2018-05-16 23:34:00
    在线转换 Babel 提供一个REPL在线编译器,可以在线将 ES6 代码转为 ES5 代码。转换后的代码,可以直接作为 ES5 代码插入网页运行。
  • ES6阮一峰

    2020-09-01 23:39:30
    一、let 和const 命令let 命令块级作用域块级作用域与函数声明 let 命令 一、基本用法 二、不存在变量提升:先声明再使用 ...ES6 允许块级作用域的任意嵌套。 内层作用域可以定义外层作用域的同名变量。 匿名立

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,021
精华内容 808
热门标签
关键字:

es6阮一峰