
ES6
柠檬布丁^O^
越努力越幸运
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
原生js实现(iterator)遍历器
function makeIterator(array){ var nextIndex=0; return { next:function(){ //value属性表示当前成员的值,done属性是一个布尔值,表示遍历是否结束。 return nextIndex<array.length?{value:array[nextIndex],done:false}:{value:...原创 2018-12-02 10:22:58 · 2608 阅读 · 0 评论 -
Object.is()
Object.is()//它用来比较两个值是否严格相等,与严格相等运算符(===)的行为基本一致。Object.is('foo','foo');//trueObject.is({},{});//false//与===不同的是+0===-0//trueNaN===NaN//falseObject.is(+0,-0);//falseObject.is(NaN,NaN);//true//...原创 2018-12-09 16:18:27 · 2878 阅读 · 0 评论 -
rest参数
ES6引入了rest参数(形式"…变量名"),用于获取函数的多余参数,这样就不需要使用arguments对象。rest参数搭配的变量是一个数组,该变量将多余的参数放入其中。function add(...value){ let sum=0; for(var val of values){ sum+=val; } return sum;}add(2,5,3);//10rest参...转载 2018-12-09 21:33:18 · 2098 阅读 · 0 评论 -
箭头函数的注意事项
1.函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象。this指向的固定化并不是因为箭头函数内部有绑定的this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正式因为它没有this,所以不能用作构造函数。2.不可以当做构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。3.不可以使用arguments对象,该对象在函...原创 2018-12-09 21:55:04 · 2057 阅读 · 0 评论 -
ES6之数值扩展
ES6提供了二进制和八进制数值的新写法,分别用前缀0b和0o(或0O)表示。二进制和八进制转十进制可以用Number()Number('0b111');//7Number('0o10');//8Number.isFinite()用来检查一个数值是否为有限的Number.isFinite(1);//trueNumber.isFinite(0.6);//trueNumber.isFin...原创 2018-12-10 12:11:39 · 169 阅读 · 1 评论 -
ES6之字符串的扩展
includes():返回布尔值,表示是否找到参数字符串startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。这三个方法都支持第二个参数,表示开始搜索的位置。let str='happy birthday';console.log(str.startsWith('happy'));//trueco...原创 2018-12-10 21:08:40 · 120 阅读 · 1 评论 -
先行断言和ES6新增后行断言及具名组匹配
"先行断言"指的是,x只有在y前面才匹配,必须写成/x(?=y)/的形式。比如,只匹配百分号之前的数字,要写成/\d+(?=%)/。"先行否定断言"指的是,x只有不在y前面才匹配,必须写成/x(?!y)/的形式。比如只匹配不在百分号之前的数字,要写成/\d+(?!%)/。//先行断言括号之中的部分(?=%)是不计入返回结果的。/\d+(?=%)/.exec('100% of US presi...原创 2018-12-11 12:34:42 · 1011 阅读 · 2 评论 -
模块化
在ES6之前,社区制定了一些模块的加载方案,最主要的有CommonJS和AMD两种,前者用于服务器,后者用于浏览器。ES6在语言的规格的层面上实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD模块,成为浏览器和服务器通用的模块解决方案。ES6模块的设计思想是尽量模块化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS和AMD模块都只能在运行时确...原创 2018-12-11 21:29:06 · 141 阅读 · 0 评论 -
ES模块与CommonJS模块的差异
CommonJS模块输出的是一个值的复制,ES6模块输出的是值得引用。CommonJS模块是运行时加载,ES6模块是编译时输出接口。第二个差异是因为CommonJS加载的是一个对象(即module.export属性),该对象只有在脚本运行结束时才会生成。而ES6模块不是对象,它的对外接口是一种静态定义,在代码静态解析阶段就会生成。CommonJS模块输出的是值的复制,也就是说,一旦输出一个值...原创 2018-12-12 12:24:55 · 4315 阅读 · 0 评论 -
ES6之数组的扩展
扩展运算符:扩展运算符是三个点(…),用于将一个数组转化为用逗号分隔的参数序列。console.log([...[1,2,3]]);//[1,2,3]//如果参数运算符后面是一个空数组,则不产生任何效果。[...[],1]//[1]代替数组的apply方法://ES5写法Math.max.apply(null,[7,6,9]);//ES6写法Math.max(...[7,6,9...原创 2018-12-07 00:55:30 · 192 阅读 · 0 评论 -
ES6中新增Symbol
ES5的对象属性名都是字符串,这容易造成属性名的冲突。ES6引入一种新的原始数据类型Symbol,表示独一无二的值。它是Javascript的第七种数据类型。其他六种为Undefined、Null、String、Boolean、Number、Object。对象的属性名现在可以有两种类型:一是原来就有的字符串类型,二新增的Symbol类型。只要属性名属于Symbol类型,就是独一无二的。let...原创 2018-12-06 22:11:25 · 408 阅读 · 0 评论 -
Object.assign的用法
Object.assign()方法用于将源对象的所有可枚举属性复制带目标对象Object.assign方法的第一个参数是目标参数,后面的参数是源对象var target={a:1};var source1={b:2};var source2=[c:3};Object.assign(target,source1,source2);console.log(target);//{a: 1, ...原创 2018-12-02 19:12:48 · 1854 阅读 · 0 评论 -
var、let和const
var用于声明变量,存在"变量提升现象",即变量可以在声明之前使用,值为undefined。let也是用于声明变量,其用法类似于var,但是所声明的变量只在let命令所在代码块中有效。let不存在变量提升,未声明的变量不能赋值,否则会报错//varconsole.log(a);//undefinedvar a=10;//letconsole.log(b);//Uncaught Refe...原创 2018-11-30 21:45:37 · 112 阅读 · 0 评论 -
ES6 变量的解构赋值
解构赋值是指ES6允许按照一定的模式从数组和对象中提取值,然后对变量进行赋值。基本用法://声明变量通常是let a=1;let b=2;let c=3;//或者是let a=1,b=2,c=3;//ES6解构赋值就可以写成let [a,b,c]=[1,2,3];解构赋值的本质属于“模式匹配”,只要等号两边模式相同,左边的变量就会被赋予对应的值。let [a,[[b],c]...原创 2018-12-01 12:13:47 · 113 阅读 · 0 评论 -
Promise异步加载图片
function loadImageAsync(url){ return new Promise((resolve,reject)=>{ let image=new Image(); image.onload=function(){ resolve(image); }; image.onerror=function(){ reject(new Error('Co...原创 2018-12-01 18:44:33 · 2395 阅读 · 0 评论 -
Promise实现封装ajax
var getJSON=function(url){ return new Promise((resolve,reject)=>{ let xhr=new XMLHttpRequest(); //第三个参数表示是异步还是同步,true表示异步,false表示同步 xhr.open("GET",url,true); xhr.onreadystatechange=functio...原创 2018-12-01 19:00:20 · 302 阅读 · 0 评论 -
Promise的基本用法
Promise简单来说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上来说,Promise是一个对象,从它可以获得异步操作的消息。Promise提供统一的API,各种操作都可以用同样的方法进行处理。Promise对象有两个特点:1.对象的状态不受外界的影响。2.一旦在状态改变就不会在再变。Promise对象代表一个异步操作,一共有三种状态:1.Pend...原创 2018-12-01 20:19:22 · 231 阅读 · 0 评论 -
ES6之Proxy
Proxy用于修改某些操作的默认行为,等同于在语言层面作出修改,所以属于一种“元编程”,即对编程语言进行编程。Proxy可以理解成在目标对象前架设的一个“拦截”成,外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行过滤和改写。var obj=new Proxy({},{ get:function(target,key,receiver){ console.lo...原创 2018-12-08 16:11:41 · 364 阅读 · 0 评论 -
Set和Map数据结构
Set是一种新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。Set可以接受具有iterable接口的其他数据结构作为参数,进行初始化。var set=new Set([1,2,3,4,2,1,2]);[...set];//1,2,3,4set.size;//5function divs(){ return [...do...原创 2018-12-06 00:35:30 · 2998 阅读 · 0 评论