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

    2018-04-08 16:37:38
    es6 阮一峰 ecmascript6 ecmascript6 ecmascript6 ecmascript6
  • 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] =...

    参考:

    ECMAScript6入门

     

    就是随便看看,了解一下。

     

    一、ECMAScript6简介

    1. 什么是ECMAScript6? JavaScript语言的下一代标准。2015年6月发布,正式名称是《ECMAScript2015标准》。

    思考:编程语言和英语、法语语言差不多吧。其实就是语言的标准、规范之类,和英语语法差不多的东西吧 = =!

     

    二、let和const命令

    1. let

    1.1 声明的变量仅在块级作用域内有效

    1.2 不存在变量提升

    1.3 暂时性死区:使用let命令声明变量之前,该变量是不可用的

    1.4 不允许重复声明

    let a = 1;

    思考:其实就是var变量自动提升和作用域容易产生错误,而出现let这样一个严谨定义的“局部变量”。

     

    2. 块级作用域

    ES5只有全局作用域、函数作用域。ES6有了块级作用域,块级就是{ }, 花括号内就是块级作用域的范围

    思考:这个作用域有啥子用呢,平时也不使用{}来当作用域。

     

    3. const命令

    1.1 声明一个只读的常量,常量的值不能改变(变量指向的内存地址的数据不得改动)

    1.2 只在声明的块级作用域内有效

    1.3 生命对象时,对象的值可改变,只是不能把变量指向另一个对象

    const PI = 3.1415;

    思考:这个const在其他语言里,用在比如事件名、模块名等等限制变量改变,比如publist static const LOGIN_EVENT:string = "LOGIN_EVENT"

               但是ES6里这个只能当成局部变量用...好想并没啥用...

     

    三、变量的解构赋值

    1.1 什么是解构? ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。

    let a ;
    let b ;
    [a,b] = [1,2];
    console.log(a,b);  //1,2
    

    思考:个人看这个赋值比较难读不习惯,感觉用在swap交换数值上很好用,不需要定义temp临时变量写3行了 = =!

    let a = 1;
    let b = 2;
    [a,b] = [b,a];
    console.log(a,b);  //2,1
    

     

     四、字符串的扩展

    1.1  字符unicode表示法

    以前超出\u0000-\uFFFF范围的字符需要双字节表示 "\uD842\uDFB7",现在只需要加个花括号就行了\u{1F680}。

    1.2  codePointAt

    以前的 var s =“吉” (上面是"土",不是"士",编码是4字节) 用chatAt(0)和charCodeAt(0)只能返回2字节,而codePointAt(0)可以正确处理4字节。

    var s = "吉";     //实际码点是134071
    s.charCodeAt(0);  //只能返回前2字节,55362
    s.codePointAt(0); //能正确返回4字节,134071
    

    1.3 String.fromCodePoint

    同上,原来的fromCharCode只能处理2字节

    String.fromCharCode(0x20BB7);  //返回不知名符号
    String.fromCodePoint(0x20BB7); //正确处理4字节,返回"吉"(上面是"土")            

    1.4 includes,startsWith,endsWith

    1.5 模板字符串

    以前
    'There are <b>' + count + '</b>'
    现在
    ‘There are <b>${count}</b>‘
    

    就是以前是字符串+号拼接很麻烦,现在在多行字符串反引号(`) 内用&{count}来代入值很方便。

    思考:基本都是String扩展了一些API,方便使用。

     

    五、正则的扩展

    思考:能不查表随手就写正则的是真男人,我就不受折磨了....

     

    六、数值的扩展

    1.1 二进制和八进制的表示法

    二进制 0b1010

    八进制 0o767

    1.2 Number的扩展

    基本就是Number扩展了一些API

    1.3 Math对象的扩展

    基本就是Math扩展了一些API

    1.4 指数运算符

    思考:就是对数值的处理上,在Number、Math等原数值处理的工具类上扩展了接口。

     

     

     待编辑...

     

     

      

     

    转载于:https://www.cnblogs.com/gamedaybyday/p/9704275.html

    展开全文
  • 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语句前)是等价的,但是应该...
  • 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教程阮一峰

    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
收藏数 1,961
精华内容 784
关键字:

es6阮一峰