ES6入门笔记

增加了块级作用域.
常量
避免了变量提升
var [a, b, c] = [1, 2, 3];
var [[a,d], b, c] = [[1,4], 2, 3];
var [...a] = [1,2]
var [c = 3] = [5] //默认值
var { foo, bar } = { foo: "aaa", bar: "bbb" };
作用. 复杂的 json & arr 解析。返回值解析
修正了 ES5 以前超过了 0xFFFF 就无法处理的问题
也就是 UTF-32. 当你占用两个字节的时候. JavaScript处理不了
ES6解决了问题,提供了方法返回准确了

Iterator 解决遍历字符串问题
repeat 重复字符串
padStart,padEnd
模板字符串 ``
标签模版 function aaa(a,b,c) {} aaa`o ${i}`
增加了数学判断类的东西. 我的弱项.
Array.from like array 转换 array
Array.of 更好的创建数组
copyWithin [1, 2, 3, 4, 5].copyWithin(0, 3) // 4,5,3,4,5
find findIndex 查找 代替 indexOf
fill 填充数组
entries,keys,values 增加数组遍历方式. for of
includes 也是查找 返回 boolean
参数变化
function log(x, y = 'World') {}
function log({x, y} = { x: 0, y: 0 }) {}
...a
function 增加了 name
() => {} (注意作用域是通的,没有单独的作用域)
尾调优化
__proto__ 实体可以访问Function的原型链。
Object.assign 合并(多层嵌套以后是浅复制)
Object.create 创建object. 可以设置属性
defineProperty & defineProperties 设置属性
Object.freeze 冻结. 也就是设置属性而已
getOwnPropertyDescriptor && getOwnPropertyDescriptors 返回一个字段的属性并且可以修改
getOwnPropertyNames 无视enumerable 遍历属性
getPrototypeOf  获取原型链
Object.is 判断是否相等 能规避一些bug
Object.Keys 无视enumerable被尊重了一下
Symbol(description) 完全不重复的对象
Symbol.for('foo') === Symbol.for('foo') 用for会查询之前是否存在过会重复

可以在Class中使用支持的方式
Symbol.hasInstance (重载 instanceof. )
Symbol.isConcatSpreadable (arr.concat 是否展开.)
Symbol.species
Symbol.match
Symbol.replace
Symbol.search
Symbol.split
Symbol.iterator (写一个方法支持默认的 for of 循环)
Symbol.toPrimitive (当该对象被转为原始类型的值,触发)
Symbol.toStringTag
Symbol.unscopables
Set  类似数组 不可重复 重复会自动忽略,forEach Iterator
Map  类似{ } 可以使用任意对象做key 不仅仅是string
WeakSet & WeakMap 和上面的一样。 只不过参数只接受对象,但是参数只接受 对象 , 且不能遍历. 因为是弱对象
WeakSet & WeakMap 这两个不是很明白。
Proxy 就是可以拦截下面的基本操作.
new Proxy(object,{});

get(target, propKey, receiver)
set(target, propKey, value, receiver)
has(target, propKey)
deleteProperty(target, propKey)
ownKeys(target)
getOwnPropertyDescriptor(target, propKey)
defineProperty(target, propKey, propDesc)
preventExtensions(target)
getPrototypeOf(target)
isExtensible(target)
setPrototypeOf(target, proto)
apply(target, object, args)
construct(target, args)

Reflect 并不是很清楚,需补
function makeIterator(array) {
  var nextIndex = 0;
  return {
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {value: undefined, done: true};
    }
    return() {  } //在for of当中退出 会调用return()
  };
}

需要返回 {value,done} 再加上Symbol.iterator
这种模式就可以支持了

set,map,array,Generator 默认支持
function* 原生支持 Iterator
yield 会停止 等待下一次的 next调用。 可用于异步编程.
return() 可以强行终止
yield* 再次调用一个 function* 场景(二叉树)
function timeout(b,ms) {
  return new Promise((resolve, reject) => {
    if(b) setTimeout(resolve, ms, 'done');
    else setTimeout(reject, ms, 'false');
  });
}

timeout(true,100).then((value) => {
  console.log(value);
},(error) => { console.log(error) });

可以嵌套
基本就是 语法糖
增加了继承 extends
可以继承原生对象
支持静态方法
  1. 一直没有什么机会用到正则. 等用到再来补补吧.
  2. 看了一遍也做了一些测试. 总觉得不是很好用. 等实际用一用

ES6入门笔记的更多相关文章

  1. 读阮一峰老师 es6 入门笔记 —— 第一章

    鉴于最近用 vuejs 框架开发项目,其中有很多涉及到 es6 语法不太理解所以便认真地读了一下这本书. 地址:http://es6.ruanyifeng.com/#README 第一章:let ,c ...

  2. 【js 笔记】读阮一峰老师 es6 入门笔记 —— 第二章

    第二章:变量的解构赋值 在es6 版本前,如果要为多个变量赋不同值,我想是件比较麻烦的事情.但es6 版本新推出了一个新技术那就是今天的主角变量的解构赋值. 变量解构赋值分为两种方法:数组解构赋值 和 ...

  3. 【js 笔记】读阮一峰老师 es6 入门笔记 —— 第一章

      鉴于最近用 vuejs 框架开发项目,其中有很多涉及到 es6 语法不太理解所以便认真地读了一下这本书. 地址:http://es6.ruanyifeng.com/#README 第一章:let ...

  4. 【ES6】ES6入门笔记

    1.概要 - ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用. 2.学习网 ...

  5. es6入门6--数组拓展运算符,Array.from()基本用法

    本文只是作为ES6入门第九章学习笔记,在整理知识点的同时,会加入部分个人思考与解答,若想知道更详细的介绍,还请阅读阮一峰大神的ES6入门 一.拓展运算符 ES6中新增了拓展运算(...)三个点,它的作 ...

  6. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  7. es6学习笔记-proxy对象

    前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...

  8. ES6读书笔记(三)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,<ES6读书笔记(二)>,现在为第三篇,本篇内容包括: 一.Promise 二.Iterator和for of循 ...

  9. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

随机推荐

  1. script标签中defer和async属性的区别

    这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...

  2. [Android]Android MVP&依赖注入&单元测试

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5422443.html Android MVP&依赖注入 ...

  3. Linux2.6内核进程调度系列--scheduler_tick()函数3.更新普通进程的时间片

    RT /** * 运行到此,说明进程是普通进程.现在开始更新普通进程的时间片. */ /* 首先递减普通进程的时间片计数器.如果用完,继续执行以下操作 */ if (!--p->time_sli ...

  4. QQ互联登录以及非官方正版应用报100044错误

    QQ第三方登录的时候,显示非官方正版应用,报100044错误:坑1:我们在QQ互联注册成功后需要设置包名和签名,签名是通过官方提供的工具生成的.注意一点:这里的签名是需要由打包签名之后APK生成,我们 ...

  5. 5-4 bash脚本编程之三 条件判断及算术运算

    1. 反引号是引用执行结果,并非是返回值 如下是错误的,结果是一行行记录,不是返回值 放大为: 练习 2. shell中如何进行算术运算 A=3 B=4 1. let算术运算表达式 2. $[算术运算 ...

  6. 分布式搜索引擎Elasticsearch性能优化与配置

    1.内存优化 在bin/elasticsearch.in.sh中进行配置 修改配置项为尽量大的内存: ES_MIN_MEM=8g ES_MAX_MEM=8g 两者最好改成一样的,否则容易引发长时间GC ...

  7. 安装centos后无法引导启动windows7的解决方法

    在电脑Windows7系统上安装Centos7,安装后找不到Windows7引导菜单. 原因:因为CentOS 7已采用新式的grub2系统,所以需要进入/boot/grub2目录后使用vi编辑gru ...

  8. 关于selenium RC的脚本开发

    第一.需要录制脚本,找个我也不说了.就是在firefox下下载一个selenium-IDE并且安装. 第二.在工具里找到selenium-IDE点击运行. 第三.默认是红色按钮点击状态的,接下来随便你 ...

  9. MPLS与LDP从入门到了解

    多协议标签交换(MPLS)是一种用于快速转发数据包的技术,它的出现就是为了提高转发效率.因为IP转发大多靠软件进行,在转发的每一跳都要进行至少一次最长匹配查找,操作复杂导致转发速度比较慢.有些厂商借鉴 ...

  10. python中的迭代器

    1.可以直接作用于for循环的数据类型 第一类:集合数据类型,如list.tuple.dict.set.str等: 第二类:generator,包括集合定义generator和带yield的gener ...