
ES6
宋极北
这个作者很懒,什么都没留下…
展开
-
Null 传导运算符
编程实务中,如果读取对象内部的某个属性,往往需要判断一下改对象是否存在。比如,要读取 message.body.user.firstName,安全的写法是写成下面这样。 const firstName = (message && message.body && message.body.user && message.body....转载 2017-12-06 17:50:00 · 1123 阅读 · 0 评论 -
ES6-对象的扩展-属性的可枚举性和遍历
可枚举对象的每一个属性都有一个描述对象,用来控制该属性的行为。Object.getOwnpropertyDescriptor 方法可以获取该属性的描述对象。 let obj = { foo: 123 };Object.getOwnPropertyDescriptor(obj, 'foo')// {// value: 123,// writable: true,...转载 2017-11-20 12:01:11 · 1070 阅读 · 0 评论 -
ES6-对象的扩展-Object.assign()
基本用法Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。 const target = { a: 1 };const source1 = { b: 2 };const source2 = { c: 3 };Object.assign(target, source1, source2);target ...转载 2017-11-17 18:21:56 · 733 阅读 · 0 评论 -
ES6-字符串扩展-at()和normalize()
at()ES5 对字符串对象提供 charAt 方法,返回字符串给定位置的字符。该方法不能识别码点大于 0xFFFF 的字符。 'abc'.charAt(0) // "a"'吉'.charAt(0) // "�"上面代码中,charAt 方法返回的是 UTF-16 编码的第一个字节,实际上是无法显示的。使用字符串实例的 at 方法,可以识别 Unicode 编号大于 0xFFF...转载 2017-10-26 17:04:22 · 2817 阅读 · 0 评论 -
ES6-对象的扩展-Object.is()
ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的 NaN 不等于自身,以及 +0 等于 -0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is 就是部署这个算法...转载 2017-11-17 15:37:39 · 321 阅读 · 0 评论 -
ES6-对象的扩展-方法name属性
函数的 name 属性,返回函数名。对象方法也是函数,因此也有 name 属性。 const person = { sayName() { console.log('hello!'); },};person.sayName.name // "sayName"上面代码中,方法的 name 属性返回函数名(即方法名)。 如果对象的方法使用了取值函数(ge...转载 2017-11-17 15:11:18 · 580 阅读 · 0 评论 -
ES6-对象的扩展-属性名表达式
JavaScript 定义对象的属性,有两种方法。 // 方法一obj.foo = true;// 方法二obj['a' + 'bc'] = 123;上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。 但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用方法一(标识符)定义属性。 var o...转载 2017-11-17 14:19:26 · 3398 阅读 · 0 评论 -
ES6-对象的扩展-属性的简介表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 const foo = 'bar';const baz = {foo};baz // {foo: "bar"}// 等同于const baz = {foo: foo};上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名,属性值为变量的值。下面另外一个例子。 fun...转载 2017-11-17 11:19:16 · 369 阅读 · 0 评论 -
ES6-字符串的扩展-codePointAt()和String.fromCodePoint()
codePointAt()JavaScript 内部,字符以UTF-16格式存储,每个字符固定为2字节,但是对于要存储4字节的字符(Unicode码点大于 0xffff 的字符),JavaScript 就会认为是2个字符。 var s = "吉";s.length // 2s.charAt(0) // ''s.charAt(1) // ''s.charCodeAt(0) /...转载 2017-10-26 12:04:25 · 677 阅读 · 0 评论 -
ES6-字符串扩展-Unicode
ES6加强了对 Unicode 的支持,并且扩展字符串对象。 字符的 Unicode 表示法JavaScript允许采用 \uxxxx 形式表示一个字符,其中 xxxx 表示字符的 Unicode 码点。1)字符串与 Unicode 编码的相互转换 '你好'.charCodeAt(0).toString(16)//'4f60'上面代码将字符串‘你好’,转化为 Uni...转载 2017-10-26 11:53:00 · 994 阅读 · 0 评论 -
ES6-指令
1.let 指令1) 用来声明变量,用法类似于var,但是所声明的变量,只在let指令所在的代码块内有效。 { var a = 10; let b = 10;}console.log(a);//10console.log(b);//undefined上述代码中,分别声明 var 和 let 这2个变量。在代码之外调用者2个变量,结果var声明的变量返回来正确的值,l...转载 2017-10-24 10:02:32 · 262 阅读 · 0 评论 -
ES6-变量的结构赋值-汇总
圆括号问题1)不能使用圆括号的情况 a.变量声明语句 // 全部报错let [(a)] = [1];let {x: (c)} = {};let ({x: c}) = {};let {(x: c)} = {};let {(x): c} = {};let { o: ({ p: p }) } = { o: { p: 2 } };变量声明语句,模式不能使用圆括号。...转载 2017-10-26 10:34:16 · 605 阅读 · 0 评论 -
ES6-函数的扩展-尾调用优化
尾调用含义尾调用(Tail Call)是函数式编程的一个重要概念,本身非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x){ return g(x);}上面代码中,函数 f 的最后一步是调用函数 g,这就叫尾调用。 以下情况都不属于尾调用。 // 情况一function f(x){ let y = g(x...转载 2017-11-10 19:01:22 · 269 阅读 · 0 评论 -
ES6-函数的扩展-catch语句的参数
目前,有一个提案,允许 try...catch 结构中的 catch 语句调用时不带参数。传统的写法是 catch 语句必须带有参数,用来接收 try 代码块抛出的错误。 try { // ···} catch (error) { // ···}新的写法允许省略 catch 后面的参数,而不报错。 try { // ···} catch {...转载 2017-11-15 14:20:50 · 3553 阅读 · 0 评论 -
ES6-对象的扩展-Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptor 方法会返回某个对象(descriptor)。ES6 引入了 Object.getOwnPropertyDescriptors 方法,返回指定对象所有自身属性(非继承属性)的描述对象。 const obj = { foo: 123, get bar() { return 'abc' }};Object.getOw...转载 2017-11-20 15:56:55 · 3816 阅读 · 0 评论 -
ES6-对象的扩展-对象的扩展运算符
在数组的扩展中,已经介绍过扩展运算符(...)。 const [a, ...b] = [1, 2, 3];a // 1b // [2, 3]ES6 将这个运算符引入了对象。 (1)结构赋值对象的解构赋值用于从一个对象取值,相当于将所有哦可遍历的、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。 let { x, y, .....转载 2017-12-06 16:49:17 · 7297 阅读 · 1 评论 -
ES6-对象的扩展-Object.keys(),Object.values(),Object.entries()
Object.keys()ES5 引入了 Object.keys 方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 var obj = { foo: 'bar', baz: 42 };Object.keys(obj)// ["foo", "baz"]ES2017 引入了跟 Object.keys 配套的 Object.val...转载 2017-12-05 14:44:01 · 16693 阅读 · 0 评论 -
ES6-对象的扩展-super关键字
this关键字总是指向函数躲在的当前对象,ES6 又新增了另一个类似的关键字 super,指向当前对象的原型对象。 const proto = { foo: 'hello'};const obj = { find() { return super.foo; }};Object.setPrototypeOf(obj, proto);obj.find() /...转载 2017-12-05 09:38:11 · 719 阅读 · 0 评论 -
ES6-数组的扩展-数组的空位
数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。 Array(3) // [, , ,]上面代码中,Array(3) 返回一个具有3个空位的数组。 注意,空位不是 undefined,一个位置的值等于 undefined,依然是有值的。空位是没有任何值,in 运算符可以说明这点。 0 in [undefined, undefin...转载 2017-11-16 18:03:17 · 571 阅读 · 0 评论 -
ES6-数组的扩展-数组实例的includes()
Array.prototype.includes 方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似。ES6引入了该方法。 [1, 2, 3].includes(2) // true[1, 2, 3].includes(4) // false[1, 2, NaN].includes(NaN) // true该方法的第二个参数表...转载 2017-11-16 17:23:48 · 6746 阅读 · 0 评论 -
ES6-数组的扩展-数组实例的entries(),keys()和values()
ES6 提供三个新方法--entries(),keys() 和 values(),用于遍历数组。它们都返回一个遍历器对象,可以用 for...of 循环进行遍历,唯一的区别是 key() 是对键名的遍历、values() 是对键值的遍历,entries() 是对键值对的遍历。 for (let index of ['a', 'b'].keys()) { console.log(ind...转载 2017-11-16 16:29:35 · 1162 阅读 · 0 评论 -
ES6-数组的扩展-数组实例的fill()
fill 方法使用给定值,填充一个数组。 ['a', 'b', 'c'].fill(7)// [7, 7, 7]new Array(3).fill(7)// [7, 7, 7]上面代码表明,fill 方法用于空数组的初始化非常方便。数组中已有的元素,会被全部抹去。 fill 方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。 ['a', '...转载 2017-11-16 16:10:30 · 783 阅读 · 0 评论 -
ES6-数组的扩展-数组实例的 find() 和 findIndex()
数组实例的 find 方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为 true 的成员,然后返回该成员。如果没有符合条件的成员,则返回 undefined。 [1, 4, -5, 10].find((n) => n < 0)// -5上面代码找出数组中第一个小于 0 的成员。 [1,...转载 2017-11-16 15:56:08 · 907 阅读 · 0 评论 -
ES6-数组的扩展-数组实例的 copyWithin()
数组实例的 copyWithin 方法,在当前数组内部,将制定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说。使用这个方法,会修改当前数组。 Array.prototype.copyWithin(target, start = 0, end = this.length)它接受三个参数。 target(必需):从该位置开始替换数据。 start(...转载 2017-11-16 15:20:38 · 309 阅读 · 0 评论 -
ES6-数组的扩展-Array.of()
Array.of() 方法用于将一组值,转换为数组。 Array.of(3, 11, 8) // [3,11,8]Array.of(3) // [3]Array.of(3).length // 1这个方法的主要目的,是弥补数组构造函数 Array() 不足。因为参数个数的不同,会导致 Array() 的行为有差异。 Array() // []Array(3) /...转载 2017-11-16 14:34:11 · 333 阅读 · 0 评论 -
ES6-数组的扩展-Array.from()
Array.from 方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。下面是一个类似数组的对象,Array.from 将它转为真正的数组。 let arrayLike = { '0': 'a', '1': 'b', '2': 'c',...转载 2017-11-16 14:11:27 · 413 阅读 · 0 评论 -
ES6-数组的扩展-扩展运算符
扩展运算符是三个点(...)。好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。 console.log(...[1, 2, 3])// 1 2 3console.log(1, ...[2, 3, 4], 5)// 1 2 3 4 5[...document.querySelectorAll('div')]// [<div>, <div&g...转载 2017-11-15 17:41:25 · 893 阅读 · 0 评论 -
ES6-数值的扩展-Math对象的扩展
ES6 在 Math 对象上新增了17个与数学相关的方法,所有这些方法都是静态方法,只能在 Math 对象上调用。Math.trunc()Math.trunc() 方法用于去除一个数的小数部分,返回整数部分。 Math.trunc(4.1) // 4Math.trunc(4.9) // 4Math.trunc(-4.1) // -4Math.trunc(-4.9) // -...转载 2017-11-03 18:57:33 · 362 阅读 · 0 评论 -
ES6-对象的扩展-_proto_ 属性,Object.setPrototypeOf(),Object.getPrototypeOf()
__proto__ 属性__proto__ 属性(前后各两个下划线),用来读取或设置当前对象的 prototype 对象。目前,所有浏览器(包括 IE11)都部署了这个属性。// es6 的写法const obj = { method: function() { ... }};obj.__proto__ = someOtherObj;// es5 的写法var ...转载 2017-11-20 17:22:32 · 5662 阅读 · 1 评论 -
ES6-变量的结构赋值-函数参数
函数参数的解构赋值 function add([x,y]) { return x + y;}add([1,2]);//3在上面代码中,函数add的参数表明是一个数组,但在传入参数的那一刻,数组参数就被解构成变量 x 和 y 。 [[1, 2], [3, 4]].map(([a, b]) => a + b);//[3,7]函数参数的解构也可以使用默...转载 2017-10-26 10:33:21 · 577 阅读 · 0 评论 -
ES6-变量的结构赋值-数值和布尔值
数值和布尔值的解构赋值 解构赋值时,如果等号右边是数值和布尔值,则会先转化为对象。 let {tmp: s} = 123;s === Number.prototype.tmp // truelet {tmp: s} = true;s === Boolean.prototype.tmp // true上面代码中,数值和布尔值的包装对象都要tmp属性,因此s都能取到值un...转载 2017-10-26 10:32:41 · 1074 阅读 · 0 评论 -
ES6-正则的扩展-u、y修饰符
u修饰符ES6 对正则表达式添加了 u 修饰符,含义为 "Unicode模式",用来正确处理大于 \uFFFF 的Unicode字符。也就是说,会正确处理四个字符的 UTF-16 编码。 /^\uD83D/.test('\uD83D\uDC2A') // true/^\uD83D/u.test('\uD83D\uDC2A') // false上面代码中,\uD83D\uDC2A...转载 2017-10-31 18:41:24 · 3273 阅读 · 1 评论 -
ES6-正则的扩展-字符串的正则方法
字符串对象共有4个方法,可以使用正则表达式:math()、replace()、search()和split()。ES6将这4个方法,在语言内部全部调用 RegExp 的实例方法,从而做到所有与正则相关的方法,全部定义在 RegExp 对象上。 String.prototype.match 调用 RegExp.prototype[Symbol.match]String.prototy...转载 2017-10-31 14:52:55 · 305 阅读 · 0 评论 -
ES6-正则的扩展-RegExp构造函数
1)RegExp 构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配。有关正则的详细内容请阅读 JavaScript指南 中的正则表达式章节。以下表达式是相等的,字面量,构造函数和工厂符号。 /pattern/flagnew RegExp(pattern [, flag])RegExp(pattern [, flag])参数: pattern:正则表达式的...转载 2017-10-31 11:47:40 · 688 阅读 · 0 评论 -
ES6-字符串扩展-模板字符串的限制
以前提到过标签模板里面,可以内嵌其他语言,但是,模板字符串默认会将字符串转义,导致无法嵌入其他语言。比如标签模板中可以嵌入LaTEX语言。 function latex(strings) { // ...}let document = latex`\newcommand{\fun}{\textbf{Fun!}} // 正常工作\newcommand{\unicode}...转载 2017-10-31 11:16:15 · 741 阅读 · 0 评论 -
ES6-字符串扩展-String.raw()
ES6 还为原生的 String 对象提供了一个 raw 方法。String.raw 方法往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。 String.raw`Hi\n${2+3}!`;// "Hi\\n5!"String.raw`Hi\u000A!`;// 'Hi\\u000A!如果原字符串的斜杠...转载 2017-10-30 18:36:00 · 1354 阅读 · 0 评论 -
ES6-函数的扩展-name属性
函数 name 的属性,返回该函数的函数名。 function foo() {}foo.name // "foo"这个属性以前就支持,只是 ES6 对这个属性的行为做了一些修改。如果将一个匿名函数赋值给一个变量,ES5 的 name 属性,会返回空字符串,而 ES6 的 name 属性会返回实际的函数名。 var f = function () {};// ES...转载 2017-11-08 18:06:16 · 380 阅读 · 0 评论 -
ES6-函数的扩展-严格模式
从 ES5 开始,函数内部可以设定为严格模式。 function doSomething(a, b) { 'use strict'; // code}ES6 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。 // 报错function doSomething(a, b = a) { ...转载 2017-11-08 16:30:31 · 438 阅读 · 0 评论 -
ES6-字符串扩展-标签模板
标签模板跟在一个函数后面,改函数将被用来处理这个模板字符串,这被称为“标签模板”功能。 alert`123`// 等同于alert('123')标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。但是,如果模板字符串里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。 let a...转载 2017-10-30 15:50:03 · 1146 阅读 · 0 评论 -
ES6-字符串扩展-模板编译
以下是通过模板字符串,生成正式模板的实例。 let template = `<ul> <% for(let i=0; i < data.supplies.length; i++) { %> <li><%= data.supplies[i] %></li> <% } %></ul&转载 2017-10-30 12:04:53 · 399 阅读 · 0 评论