自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

转载 Null 传导运算符

编程实务中,如果读取对象内部的某个属性,往往需要判断一下改对象是否存在。比如,要读取 message.body.user.firstName,安全的写法是写成下面这样。 const firstName = (message && message.body && message.body.user && message.body....

2017-12-06 17:50:00 1030

转载 ES6-对象的扩展-对象的扩展运算符

在数组的扩展中,已经介绍过扩展运算符(...)。 const [a, ...b] = [1, 2, 3];a // 1b // [2, 3]ES6 将这个运算符引入了对象。 (1)结构赋值对象的解构赋值用于从一个对象取值,相当于将所有哦可遍历的、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。 let { x, y, .....

2017-12-06 16:49:17 7190 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 16583

转载 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 672

转载 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 5577 1

转载 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 3715

转载 ES6-对象的扩展-属性的可枚举性和遍历

可枚举对象的每一个属性都有一个描述对象,用来控制该属性的行为。Object.getOwnpropertyDescriptor 方法可以获取该属性的描述对象。 let obj = { foo: 123 };Object.getOwnPropertyDescriptor(obj, 'foo')// {// value: 123,// writable: true,...

2017-11-20 12:01:11 1017

转载 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 690

转载 ES6-对象的扩展-Object.is()

ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的 NaN 不等于自身,以及 +0 等于 -0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is 就是部署这个算法...

2017-11-17 15:37:39 280

转载 ES6-对象的扩展-方法name属性

函数的 name 属性,返回函数名。对象方法也是函数,因此也有 name 属性。 const person = { sayName() { console.log('hello!'); },};person.sayName.name // "sayName"上面代码中,方法的 name 属性返回函数名(即方法名)。 如果对象的方法使用了取值函数(ge...

2017-11-17 15:11:18 526

转载 ES6-对象的扩展-属性名表达式

JavaScript 定义对象的属性,有两种方法。 // 方法一obj.foo = true;// 方法二obj['a' + 'bc'] = 123;上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。 但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用方法一(标识符)定义属性。 var o...

2017-11-17 14:19:26 3326

转载 ES6-对象的扩展-属性的简介表示法

ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 const foo = 'bar';const baz = {foo};baz // {foo: "bar"}// 等同于const baz = {foo: foo};上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名,属性值为变量的值。下面另外一个例子。  fun...

2017-11-17 11:19:16 309

转载 ES6-数组的扩展-数组的空位

数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。 Array(3) // [, , ,]上面代码中,Array(3) 返回一个具有3个空位的数组。 注意,空位不是 undefined,一个位置的值等于 undefined,依然是有值的。空位是没有任何值,in 运算符可以说明这点。 0 in [undefined, undefin...

2017-11-16 18:03:17 520

转载 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 6656

转载 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 1113

转载 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 733

转载 ES6-数组的扩展-数组实例的 find() 和 findIndex()

数组实例的 find 方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为 true 的成员,然后返回该成员。如果没有符合条件的成员,则返回 undefined。 [1, 4, -5, 10].find((n) => n < 0)// -5上面代码找出数组中第一个小于 0 的成员。  [1,...

2017-11-16 15:56:08 853

转载 ES6-数组的扩展-数组实例的 copyWithin()

数组实例的 copyWithin 方法,在当前数组内部,将制定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说。使用这个方法,会修改当前数组。 Array.prototype.copyWithin(target, start = 0, end = this.length)它接受三个参数。  target(必需):从该位置开始替换数据。 start(...

2017-11-16 15:20:38 264

转载 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 283

转载 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 365

转载 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 831

转载 ES6-函数的扩展-catch语句的参数

目前,有一个提案,允许 try...catch 结构中的 catch 语句调用时不带参数。传统的写法是 catch 语句必须带有参数,用来接收 try 代码块抛出的错误。 try { // ···} catch (error) { // ···}新的写法允许省略 catch 后面的参数,而不报错。  try { // ···} catch {...

2017-11-15 14:20:50 3489

转载 ES6-函数的扩展-尾调用优化

尾调用含义尾调用(Tail Call)是函数式编程的一个重要概念,本身非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x){ return g(x);}上面代码中,函数 f 的最后一步是调用函数 g,这就叫尾调用。 以下情况都不属于尾调用。 // 情况一function f(x){ let y = g(x...

2017-11-10 19:01:22 234

转载 ES6-函数的扩展-双冒号运算符

箭头函数可以绑定 this 对象,大大减少了显式绑定 this 对象的写法(call、apply、bind)。但是,箭头函数并不适用于所有场合,所以现在有一个提案,提出了“函数绑定”(function bind)运算符,用来取代 call、apply、bind 调用。函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。改运算符会自动将左边的对象,作为上下文环境(即 t...

2017-11-10 09:58:15 8230 1

转载 ES6-函数的扩展-箭头函数

基本用法ES6 允许使用“箭头”(=>)定义函数。 var f = v => v;上面的箭头函数等于:  var f = function(v) { return v;};如果箭头函数不需要参数或者需要多个参数,就使用一个圆括号代表参数的部分。  var f = () => 5;// 等同于var f = functio...

2017-11-09 17:31:56 399

转载 ES6-函数的扩展-name属性

函数 name 的属性,返回该函数的函数名。 function foo() {}foo.name // "foo"这个属性以前就支持,只是 ES6 对这个属性的行为做了一些修改。如果将一个匿名函数赋值给一个变量,ES5 的 name 属性,会返回空字符串,而 ES6 的 name 属性会返回实际的函数名。  var f = function () {};// ES...

2017-11-08 18:06:16 328

转载 ES6-函数的扩展-严格模式

从 ES5 开始,函数内部可以设定为严格模式。 function doSomething(a, b) { 'use strict'; // code}ES6 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。  // 报错function doSomething(a, b = a) { ...

2017-11-08 16:30:31 383

转载 ES6-函数的扩展-rest参数

ES6 引入 rest 参数(形式为 ...变量名) ,用于获取函数的多余参数,这样就不需要使用 arguments 对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。 function add(...values) { let sum = 0; for (var val of values) { sum += val; } retur...

2017-11-07 20:46:14 249

转载 ES6-函数的扩展-函数参数的默认值

 1)基本用法ES6 之前,不能直接为函数的参数指定默认值。 function log(x, y) { y = y || 'World'; console.log(x, y);}log('Hello') // Hello Worldlog('Hello', 'China') // Hello Chinalog('Hello', '') // Hello Worl...

2017-11-07 16:31:00 853

转载 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 319

转载 ES6-数值的扩展-安全整数和 Number.isSafeInteger()

JavaScript 能够准确表示的整数范围在 -2^53 到 2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。 Math.pow(2, 53) // 90071992547409929007199254740992 // 90071992547409929007199254740993 // 9007199254740992Math.pow(2, 53) ...

2017-11-02 16:52:25 1185

转载 ES6-数值的扩展-Number.isInteger() 和 Number.EPSILON

Number.isInteger() 用来判断一个值是否为整数,需要注意的是,在 JavaScript 内部,整数和浮点数是同样的存储方式,所以 3 和 3.0 被视为同一个值。 Number.isInteger(25) // trueNumber.isInteger(25.0) // trueNumber.isInteger(25.1) // falseNumber.isIn...

2017-11-02 15:24:37 2348

转载 ES6-数值的扩展-Number.parseInt(), Number.parseFloat()

ES6 将全局方法 parseInt() 和 parseFlost(),移植到 Number 对象上面,行为报纸不变。 // ES5的写法parseInt('12.34') // 12parseFloat('123.45#') // 123.45// ES6的写法Number.parseInt('12.34') // 12Number.parseFloat('123.45#'...

2017-11-02 12:00:01 1611

转载 ES6-数值的扩展-Number.isFinite(), Number.isNaN()

Number.isFinite() 用来检查一个数值是否为有限的(finite)。 Number.isFinite(15); // trueNumber.isFinite(0.8); // trueNumber.isFinite(NaN); // falseNumber.isFinite(Infinity); // falseNumber.isFinite(-Infinity);...

2017-11-02 11:50:18 1038

转载 ES6-数值的扩展-二进制和八进制表示法

ES6 提供了二进制和八进制数值的最新的写法,分别用前缀 0b(0B)和 0o(0O)表示。 0b111110111 === 503 // true0o767 === 503 // true其实从 ES5 开始,在严格模式中,八进制就不再允许使用前缀 0 表示,ES6 进一步明确要使用前缀 0o 表示。  // 非严格模式(function(){ console...

2017-11-02 10:49:16 1543

转载 ES6-正则的扩展-具名组匹配

1)正则表达式使用圆括号进行组匹配。 const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/;上面代码中,正则表达式里面有三组圆括号。使用exec方法,就可以将这三组匹配结果提取出来。 const matchObj = RE_DATE.exec('1999-12-31');const year = matchObj[1]; // 1999co...

2017-11-01 17:35:42 1047

转载 ES6-正则的扩展-Unicode 属性类

目前有一个提案,引入了一种新的类的写法 \p{...} 和\P{...},允许正则表达式匹配符合 Unicode 某种属性的所有字符。 const regexGreekSymbol = /\p{Script=Greek}/u;regexGreekSymbol.test('π') // true上面代码中,\p{Script=Greek} 指定匹配一个希腊字母,所以匹配 π 成功U...

2017-11-01 17:08:50 450

转载 ES6-正则的扩展-后行断言

JavaScript 语言的正则表达式,只支持先行断言(lookahead)和先行否定断言(negative lookahead),不支持后行断言(lookbehind)和后行否定断言(negative lookbehind)。目前,有一个提案,引入后行断言,V8 引擎4.9版已经支持。”先行断言“指的是,x只有在y前面才匹配,必须写成/x(?=y)/。比如,只匹配百分号之前的数字,要写成/\...

2017-11-01 15:59:13 1082

转载 ES6-正则的扩展-dotAll 模式

正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是行终止符(line terminator character)除外。以下四个字符属于“行终止符”  U+000A 换行符(\n)  U+000D 回车符(\r)  U+2028 行分隔符(line separator)  U+2029 段分隔符(paragraph separator) /foo.bar/....

2017-11-01 15:17:30 446

转载 ES6-正则的扩展-sticky属性和flags属性

sticky 属性与 y 修饰符相匹配,ES6 的正则对象多了 sticky 属性,表示是否设置了 y 修饰符。 var r = /hello\d/y;r.sticky // true     flags 属性ES6 位正则表达式新增了 flags 属性,会返回正则表达式的修饰符。 // ES5 的 source 属性// 返回正则表达式的正...

2017-10-31 20:15:22 910

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除