跳至主要內容
Promise

Promise


Kite.Zeng小于 1 分钟JavaScript
Proxy和Reflect

Proxy和Reflect

Proxy

  • 相当于“代理”,作为“拦截器”使用,对被拦截的对象进行相关自定义操作
  • 支持13种操作/应用场景:
    • get(target, propKey, receiver)
      • 现数组读取倒序
      • 实现链式操作
      • DOM通用节点创建
    • set(target, propKey, value, receiver): 属性需可配置(configurable)以及可写(writable)
      • 控制私有属性不被修改
    • has(target, propKey)
    • deleteProperty(target, propKey)
    • ownKeys(target)
    • getOwnPropertyDescriptor(target, propKey)
    • defineProperty(target, propKey, propDesc)
    • preventExtensions(target)
    • getPrototypeOf(target)
    • isExtensible(target)
    • setPrototypeOf(target, proto)
    • apply(target, object, args)
    • construct(target, args)

Kite.Zeng小于 1 分钟JavaScript
Set和WeakSet、Map和WeakMap

Set和WeakSet、Map和WeakMap

Set

  • 类似数组的数据结构,每个成员的值是唯一的
  • Set初始化参数接受数组(具有Iterable接口的数据结构),会将重复值排除,只保留一个
  • 添加值时,不会做类型的自动转换(5 和 “5”),但NaN会被认为是相同(实际上NaN不等于NaN)
  • 支持keys()values()entries()方法,keys()values()方法的效果是一样的
  • 可以实现 并集、交集、差集
  • 常见场景
    • 使用Set实现数组的去重 [...new Set(array)] / Array.from(new Set(array))
    • 使用Set实现字符串去重 [...new Set('ababbc')].join('')

Kite.Zeng大约 2 分钟JavaScript
对象的拓展

对象的拓展

  • Object.is(),是对ES5的=====的完善
Object.is(+0, -0)    // false
Object.is(NaN, NaN)  // true

Kite.Zeng小于 1 分钟JavaScript
函数的拓展

函数的拓展

  • 支持参数默认值
  • rest参数(...param),用于获取剩余的参数
    • rest参数是一个数组,包含所有剩余的参数
    • 不支持后续再传入其他参数(rest参数只能作为最后一个参数传入)
    • 函数的length属性长度不包括rest参数
  • 函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。

箭头函数

  • 简化代码编写
  • 注意事项:
    • this指向函数定义时所在的对象,而不是像普通函数的运行时所在的对象。setTimeout
      • 箭头函数没有自己的this,所以不能使用 bind() apply() call()
    • 不能作为箭头函数
    • 不可以使用arguments参数
    • 不能使用yield命令,不是是Generator函数

Kite.Zeng小于 1 分钟JavaScript
Symbol

Symbol

Symbol 是一个类似字符串的基本类型(JavaScript的第七个基本类型),用于防止对象相同属性重冲突。

const s1 = Symbol()

const s2 = Symbol('foo')

const s3 = Symbol({
	toString() {
		return 'abc';
	}
})

Kite.Zeng大约 1 分钟JavaScript
数值的拓展

数值的拓展

  • isFinite()
  • isNaN()
  • isInteger():判断数字是否为整数,点位过多时可能出现精度丢失
  • parseInt() => Number.parseInt()
  • parseFloat() => Number.parseFloat()
  • Number.EPSILON === Math.pow(2, -52):用于浮点数计算,设置误差范围,明确是否计算数值是否精确。
    • eg. 误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)

Kite.Zeng小于 1 分钟JavaScript
字符串的拓展

字符串的拓展

  • 加强Unicode的表示
  • 增加Iterator接口,用于字串使用for...in遍历

模板字符串

  • 支持普通单行字符串
  • 支持多行字符串
  • 支持字符串中嵌入变量${}
  • 支持在嵌入变量中调用函数

实例方法

  • includes() / startWith() / endWith() : 判断字符串中是否包含指定内容
  • repeat():重复次数
  • padStart() / padEnd():补齐至指定内容至指定长度
  • trimStart() / trimEnd():清楚空白内容(包括空格、tab键、换行符等不可见的空白内容)

Kite.Zeng小于 1 分钟JavaScript
JavaScript与ECMAScript的关系

JavaScript与ECMAScript的关系

ECMAScript是JavaScript的规格标准,JavaScript是ECMAScript的实现

JavaScript是 Netspace 公司创造的,为了制订成国际标准,将其提交给ECMA协会。ECMA协会为了区别JavaScript,便命名为ECMAScript。

ECMAScript每年会根据先前的提案,经过五个阶段及其委员会批准后,发布一个新版本,以年份命名。

目前广为使用的是ECMAScript2015版本(即ES6)


Kite.Zeng小于 1 分钟JavaScript
解构赋值

解构赋值

一、数组的解构赋值

数据解构赋值,准确来说是对可遍历的结构数据进行解构赋值

  • 支持完全解构赋值 和 不完全解构赋值
  • 支持嵌套结构解构
  • 支持设置默认值(赋值元素值的undefined时有效,null则解构赋值为null)

1. 完全解构

将数组内的所有元素赋值到对应的变量中

const [a, b, c] = [1, 2, 3]

Kite.Zeng大约 1 分钟JavaScript