02 2019 档案

摘要:概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Sym 阅读全文
posted @ 2019-02-25 18:10 刘欢乐 阅读(17343) 评论(0) 推荐(2)
摘要:Object.fromEntries() Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。 该方法的主要目的,是将键值对的数据结构还原为对象,因此特别适合将 Map 结构转为对象。 该方法的一个用处是配合URLSearchPara 阅读全文
posted @ 2019-02-25 17:38 刘欢乐 阅读(1507) 评论(0) 推荐(0)
摘要:Object.keys(),Object.values(),Object.entries() Object.keys() ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 ES2017 引入了跟Object.ke 阅读全文
posted @ 2019-02-25 17:37 刘欢乐 阅读(342) 评论(0) 推荐(0)
摘要:Object.getOwnPropertyDescriptors() ES5 的Object.getOwnPropertyDescriptor()方法会返回某个对象属性的描述对象(descriptor)。ES2017 引入了Object.getOwnPropertyDescriptors()方法,返 阅读全文
posted @ 2019-02-25 17:31 刘欢乐 阅读(1236) 评论(0) 推荐(0)
摘要:Object.assign() 基本用法 Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。 Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。 注意,如果目标对象与源对象有同名属性,或多个源对象有同名属 阅读全文
posted @ 2019-02-25 17:08 刘欢乐 阅读(202) 评论(0) 推荐(0)
摘要:Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符( )。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。 ES6 提出“Same 阅读全文
posted @ 2019-02-25 14:53 刘欢乐 阅读(261) 评论(0) 推荐(0)
摘要:对象的扩展运算符 扩展运算符(...)。ES2018 将这个运算符引入了对象。 解构赋值 对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。 上面代码中,变量z是解构赋值所 阅读全文
posted @ 2019-02-25 14:45 刘欢乐 阅读(465) 评论(0) 推荐(0)
摘要:super 关键字 我们知道,this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。 上面代码中,对象obj.find()方法之中,通过super.foo引用了原型对象proto的foo属性。 注意,super关键字表示原型对象时,只能用在对 阅读全文
posted @ 2019-02-25 11:37 刘欢乐 阅读(134) 评论(0) 推荐(0)
摘要:属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。 除了属性简写,方法也可以简写。 下面是一个实际的例子。 这种写法用于函数的返回值,将会非常方便 阅读全文
posted @ 2019-02-25 09:33 刘欢乐 阅读(286) 评论(0) 推荐(0)
摘要:数组实例的 find() 和 findIndex() 数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。 上面代码找出数组中第一个小 阅读全文
posted @ 2019-02-20 10:27 刘欢乐 阅读(757) 评论(0) 推荐(0)
摘要:数组实例的 copyWithin() 数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。 它接受三个参数。 target(必需):从该位置开始替换数据。如果为负值,表示倒数。 start(可 阅读全文
posted @ 2019-02-20 09:52 刘欢乐 阅读(447) 评论(0) 推荐(0)
摘要:Array.of() Array.of方法用于将一组值,转换为数组。 这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。 上面代码中,Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Arr 阅读全文
posted @ 2019-02-19 17:03 刘欢乐 阅读(184) 评论(0) 推荐(0)
摘要:Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。 下面是一个类似数组的对象,Array.from将它转为真正的数组。 实际应用中 阅读全文
posted @ 2019-02-19 15:29 刘欢乐 阅读(355) 评论(0) 推荐(0)
摘要:扩展运算符 含义 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。 该运算符主要用于函数调用。 上面代码中,array.push(...items)和add(...numbers)这两行,都是函数的调用,它们的都使用了扩展运算符,该运 阅读全文
posted @ 2019-02-19 11:42 刘欢乐 阅读(539) 评论(0) 推荐(0)
摘要:bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。JavaScript 的一 阅读全文
posted @ 2019-02-18 17:54 刘欢乐 阅读(178) 评论(0) 推荐(0)
摘要:函数参数的默认值 基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数log的参数y有没有赋值,如果没有,则指定默认值为World。这种写法的缺点在于,如果参数y赋值了,但是对应的布尔值为false,则该赋值不起作用。就像上面代码的最后一行,参数y等于空字符 阅读全文
posted @ 2019-02-18 17:34 刘欢乐 阅读(166) 评论(0) 推荐(0)
摘要:二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示。 如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。 Num 阅读全文
posted @ 2019-02-18 09:26 刘欢乐 阅读(203) 评论(0) 推荐(0)
摘要:ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。 但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两 阅读全文
posted @ 2019-02-15 11:31 刘欢乐 阅读(144) 评论(0) 推荐(0)
摘要:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 以前,为变量赋值,只能直接指定值。 ES6 允许写成下面这样。 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。下面是一些 阅读全文
posted @ 2019-02-14 16:27 刘欢乐 阅读(153) 评论(0) 推荐(0)
摘要:ES6 声明变量的六种方法 ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。 顶层对象的属性 顶层对象,在浏览器环境指的是 阅读全文
posted @ 2019-02-13 18:04 刘欢乐 阅读(530) 评论(0) 推荐(0)
摘要:基本用法 const声明一个只读的常量。一旦声明,常量的值就不能改变。 上面代码表明改变常量的值会报错。 const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。 上面代码表示,对于const来说,只声明不赋值,就会报错。 const的作用域与let命令 阅读全文
posted @ 2019-02-13 17:54 刘欢乐 阅读(167) 评论(0) 推荐(0)
摘要:块级作用域 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。 第一种场景,内层变量可能会覆盖外层变量。 上面代码的原意是,if代码块的外部使用外层的tmp变量,内部使用内层的tmp变量。但是,函数f执行后,输出结果为undefined,原因在于变量 阅读全文
posted @ 2019-02-13 16:44 刘欢乐 阅读(190) 评论(0) 推荐(0)
摘要:let 命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,le 阅读全文
posted @ 2019-02-13 16:40 刘欢乐 阅读(318) 评论(0) 推荐(0)
摘要:前两篇我们讲了ES6中的Promise以及Promise/A+规范,在Promise的知识体系中,jquery当然是必不可少的一环,所以本篇就来讲讲jquery中的Promise,也就是我们所知道的Deferred对象。 事实上,在此之前网上有很多文章在讲jquery Deferred对象了,但是总 阅读全文
posted @ 2019-02-11 17:40 刘欢乐 阅读(314) 评论(0) 推荐(0)
摘要:上一篇我们讲解了ES6中Promise的用法,但是知道了用法还远远不够,作为一名专业的前端工程师,还必须通晓原理。所以,为了补全我们关于Promise的知识树,有必要理解Promise/A+规范,理解了它你才能知道Promise内部是怎么回事,我们ES6中的Promise是如何一路走来的。 网上关于 阅读全文
posted @ 2019-02-11 17:37 刘欢乐 阅读(510) 评论(0) 推荐(0)
摘要:去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使用方法。 ES6 Promise 先拉出来遛遛 复杂的概念先不讲,我们先简单粗暴地把Prom 阅读全文
posted @ 2019-02-11 17:26 刘欢乐 阅读(216) 评论(0) 推荐(0)
摘要:1. setState基本特点 1. setState是同步执行的 setState是同步执行的,但是state并不一定会同步更新 2. setState在React生命周期和合成事件中批量覆盖执行 在React的生命周期钩子和合成事件中,多次执行setState,会批量执行 具体表现为,多次同步执 阅读全文
posted @ 2019-02-11 15:45 刘欢乐 阅读(343) 评论(0) 推荐(0)