ES6
文章平均质量分 73
ES6
Stephy_Yy
此人很懒,还是写了点什么
展开
-
ES6-24 生成器与迭代器的应用
手写生成器var arr = [1,2]function generator(arr){ var i = 0; return{ next(){ var done = i > arr.length ? true : false, value = done ? 'undefined' : arr[i++]; return { value : value,原创 2021-07-30 07:26:55 · 93 阅读 · 0 评论 -
【重要】ES6-23 JavaScript模块化
前端js模块化的演变发展 模块化解决的问题 传统模块化、插件化 CommonJS AMD/CMD ES6模块化ES6以前 没有js引擎一开始js写在html的script标签里js内容增多,抽取出index.js文件,外部引入js再增加,index.html对应index.js index2.html对应index2.js(模块化概念的诞生)含有可复用的代码,提出公共的common.js引入common.js的所有内容不合理 → 不能光以页面为基准来区分程序块、分js文件..原创 2021-07-29 22:46:31 · 203 阅读 · 0 评论 -
ES6-22 手写实现之『ES6 Promise』
doSth().then(function(data){ console.log(data) // 10})function doSth(){ let data = 10 return { then(callback){ callback(data) } }}function doSth() { let data = 30 return new Promise(function (resolve原创 2021-07-28 07:36:12 · 85 阅读 · 0 评论 -
【co】ES6-20/21 iterator与generator
iterator内部迭代器:系统定义好的迭代器接口(如数组Symbol.iterator)外部迭代器:手动部署(可以给obj定义外部迭代器)对于遍历器对象来说,done: false和value: undefined属性都是可以省略的除了next之外还可以增加return(){},在for…of循环中凡是使用break或者throw new Errow()来终止循环的,会走returnlet obj = { a: 1, b: 2, c: 3, [Symbo.原创 2021-07-26 22:25:49 · 104 阅读 · 0 评论 -
ES6-18/19 异步的开端-promise
ES6-18异步的开端-promiseES6-19 promise的使用方法和自定义promisifytry catch只能捕获同步异常,不能捕获异步的等待所有异步都执行完,打印结果,比较笨拙的方法,在每个异步操作加arr.length === 3 && show(arr)Promise是构造函数原型上的方法then、catch、finally其余都在构造函数上:all、race、reject、resolve实例化的参数executor是一个函数exe原创 2021-07-25 19:01:21 · 114 阅读 · 2 评论 -
ES6-7 - 箭头函数的实质、箭头函数的使用场景
箭头函数返回对象// 这种情况要要用(),否则会将对象的{}解释为块const fn = (a, b) => ({a:1, b:2})箭头函数的特点this指向由外层函数的作用域来决定,它本身没有this,不能通过call、apply、bind改变不能作为构造函数使用不可以使用arguments对象,该对象在函数体内不存在,可用rest代替不可以使用yield命令,因此箭头函数不能用作 Generator 函数。function foo() { console.log('原创 2021-07-13 07:16:41 · 205 阅读 · 1 评论 -
ES6-3 let进阶、const、全部变量与顶层对象
一 const1. 定义常量1.1 引入模块时const test = require('http')1.2 定义时必须赋值(初始化)且不可修改const a;// Uncaught SyntaxError: Missing initializer in const declaration若赋值为原始值,不可修改若赋值为引用值,对于的地址不可修改,但指向空间的内容是可变的const a = {};a.num = 10;// 转义后"use strict";var a =原创 2021-07-10 21:03:42 · 96 阅读 · 0 评论 -
ES6-2 块级作用域与嵌套、let、暂行性死区
阮一峰ES6 - let思考,在编写代码时,有es5、es6的语法,究竟是否有块级作用域?ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。1. var关键字可以重复声明var num1 = 1;var num1 = 100;console.log(num1) // 1002. let块级作用域2.1 同一作用域下不能重复声明(无论是let/var/const声明)let num1 = 1;var num1 = 100原创 2021-07-10 17:17:05 · 1328 阅读 · 0 评论 -
ES6-1 ES6版本过渡历史
一 历史HTMLHTML 1, HTML 2, HTML 3 1991-1997 IETF(the Internet Engineering Task Force) 国际互联网工程任务组1997.1 HTML3.2 W3CJavaScript1995 liveScript(后改名为JavaScript1996年改名)1996 javascript 1.0 1.1;1997 Jscript1997.6 ECMAScript 1.01998.6 ECMAScript 2.01999.1原创 2021-07-10 10:07:01 · 179 阅读 · 0 评论 -
ES6-4/5 解构赋值、函数默认值、数组解构、对象解构
一 解构赋值1 虚值含义:在Boolean转换结果为假的值falsy2 函数默认值es6除了undefined给默认值,其余取传入的值// es5写法function foo(x, y) { // x = x || 1; // y = y || 2; // 以上写法,遇0出bug // 计算类型的,要取得正确结果,要考虑0的情况,应如下 if (x !== 0) { x = x || 1; } if (y !==原创 2021-07-11 10:43:00 · 279 阅读 · 0 评论 -
ES6-6 - this指向、箭头函数基本形式、rest运算符
一 chrome断点调试观察函数调用栈// 25minvar x = 1;function foo(x, y = function () { x = 2; console.log(2) }) { var x = 3; y(); console.log(x)}foo()console.log(x)// 2 3 1var x = 1;function foo(x, y = function () { x = 2; console.log(x) }) {原创 2021-07-12 07:45:55 · 94 阅读 · 1 评论 -
ES6-8 - 函数名/对象拓展、描述符、getter/setter
函数名有两种特殊情况:bind方法创造的函数,name属性返回bound加上原函数的名字;Function构造函数创造的函数,name属性返回anonymous。bind函数名// 以bound开头function foo() { }const fnName = foo.bind().nameconsole.log(fnName) // bound foogetter setter如果对象的方法使用了取值函数(getter)和存值函数(setter),则name属性不是在该方原创 2021-07-14 07:49:07 · 330 阅读 · 1 评论 -
ES6-9 对象密封4种方式、assign、取值函数的拷贝
一 对象密封1 Object.preventExtensions 禁止对象拓展,仍可删除严格模式下报错const origin = { a: 1}const fixed = Object.preventExtensions(origin)console.log(origin === fixed) // trueconsole.log(Object.isExtensible(origin)) // false 不可拓展origin.b = 100console.log(origi原创 2021-07-15 07:46:56 · 138 阅读 · 1 评论 -
ES6-10 super、4种遍历方式、原型、symbol遍历
由于现代 JavaScript 引擎优化属性访问所带来的特性的关系,更改对象的 [[Prototype]]即__proto__在各个浏览器和 JavaScript 引擎上都是一个很慢的操作。一 Object原型方法1 Object.setPrototypeOf(obj, proto)用该方法而不是直接修改__proto__返回值是设置好原型的obj,即第一个参数若第一个参数不是对象,则该操作没有效果,将第一个参数构造函数的原型作为obj的原型const n = new Number(1).原创 2021-07-16 07:37:28 · 216 阅读 · 2 评论 -
ES6-11 Symbol、iterator、forOf、typeArray
…剩余运算符const obj1 = { a: 1, b: 2}const obj2 = { a: 100, b: 2, c: 300}const obj = { ...obj1, ...obj2}console.log(obj) // 和Object.assign(obj, obj1, obj2)结果相同[Symbol.hasInstance]Symbol构造函数上的属性,默认调用了方法iterator迭代器对数据结构读原创 2021-07-17 10:19:38 · 88 阅读 · 0 评论 -
ES6-12 array/数值拓展、ArrayOf、ArrayFrom
要使用…须有迭代器接口数组方法构造器上的方法Array.of()声明数组替代new Array()的方式声明数组new Array()不传参数返回空数组,只传1个参数时,代表数组长度,内容用empty填充,传多个参数,则代表数组内容,容易有歧义console.log(new Array()) // []console.log(new Array(1)) // [empty]console.log(new Array(1, 2, 3)) // [1, 2, 3]console.log(原创 2021-07-18 16:42:02 · 156 阅读 · 0 评论 -
ES6-13 正则方法、修饰符yus、UTF_16编码方式
修饰符m multiLine 对于str中含\n的情况g globali ignoreCase元字符反斜杠加转义元字符含义简写\w匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。word\W匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。space\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。[原创 2021-07-19 07:30:19 · 271 阅读 · 2 评论 -
ES6-14 Unicode表示法、字符串方法、模板字符串
Unicode表示法本身能正常识别的,加{}也能识别,花括号内的内容表示码点parseInt('0061',16) // 十进制的97,97在ASCII码中对应aconsole.log('\u0061') // aconsole.log('\u{0061}') // aconsole.log('\u{61}') // a原型上方法codePointAt(十进制)字符串的长度是字符的长度,需要4个字节表示的字符,长度为2charCodeAt返回的也是码点凡是超过oxffff的,用原创 2021-07-20 16:25:32 · 228 阅读 · 0 评论 -
ES6-15 map与set
Promise、Proxy、Map、Set这些ES6新增的api无法用babel实现语法降级,需要使用到polyfillSet成员是唯一的,不能重复有iterator接口,可迭代具有iterator接口的所有类型,都能作为new Set()的参数,如类数组、数组const myS = new Set()console.log(myS)myS.add(1) // 只能传1个参数console.log(myS)myS.add(1) // 添加重复的则无效果,成员是唯一的consol.原创 2021-07-21 21:47:26 · 112 阅读 · 1 评论 -
ES6-16 WeakMap与WeakSet、proxy与reflect
WeakMap/WeakSet原型上不存在遍历方法(没有部署iterator接口)成员只能是对象垃圾回收机制不考虑对成员对象的应用WeakSet/WeakMap 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。这是因为垃圾回收机制根据对象的可达性(reachability)来判断回收,如果对象还能被访问到,垃圾回收机制就不会释放这块内存原创 2021-07-22 07:21:29 · 180 阅读 · 1 评论 -
ES6-17 class与对象
class模拟类的方式语法糖(把以前的写法换了一个方式)类内部的方法是不可枚举的ES5用Object.assign拓展的原型属性是可枚举的function Point(x, y) { this.x = x; this.y = y;}// 这样定义的原型上方法eat\drink是可枚举的Point.prototype = Object.assign(Point.prototype, { eat: function () { }, drink: funct原创 2021-07-24 10:33:33 · 130 阅读 · 1 评论