ES6

文件的导入导出

  1. export default 和 export 导出,import导入。
  2. 补充:
    • 还有两个相似的:module.exports 和 exports (exports = module.exports) 导出,require() 导入
    • 与之区别是:(1)一个是CommonJS模块规范,一个是ES6语法
    • 参考: 外链、[开发者社区:Nodejs中的CommonJS Module和ECMAScript Module](https://cloud.tencent.com/developer/article/1490892)

Reflect(反射)

1.作用:操作对象
2. 存在的意义

for...in... 和 for...of.... 和 for await... of

  1. for...in... : 遍历对象
  2. for...of.... 和 for await ... of ... : 遍历迭代器
  3. for await ... of ...: 只能在 async中使用

Symbol

介绍: Symbol 是一种基本数据类型
目的:每个从 Symbol() 返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的
语法:Symbol([description])
常用方法:

  1. Symbol.for(key) : 会根据给定的键 key,来从运行时的 symbol 注册表中找到对应的 symbol,如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入全局 symbol 注册表中。 (和 Symbol() 不同的是,用 Symbol.for() 方法创建的的 symbol 会被放入一个全局 symbol 注册表中。Symbol.for() 并不是每次都会创建一个新的 symbol,它会首先检查给定的 key 是否已经在注册表中了。假如是,则会直接返回上次存储的那个。否则,它会再新建一个。)
  2. Symbol.keyFor(sym) : 如果全局注册表中查找到该 symbol,则返回该 symbol 的 key 值,返回值为字符串类型。否则返回 undefined
Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo"
Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol

Symbol.for("bar") === Symbol.for("bar"); // true,证明了上面说的
Symbol("bar") === Symbol("bar"); // false,Symbol() 函数每次都会返回新的一个 symbol

var sym = Symbol.for("mario");
sym.toString();
// "Symbol(mario)",mario 既是该 symbol 在 symbol 注册表中的键名,又是该 symbol 自身的描述字符串
// 创建一个全局 Symbol
var globalSym = Symbol.for("foo");
Symbol.keyFor(globalSym); // "foo"

var localSym = Symbol();
Symbol.keyFor(localSym); // undefined,

// 以下 Symbol 不是保存在全局 Symbol 注册表中
Symbol.keyFor(Symbol.iterator); // undefined

扩展:
js中原型属性一般是不可枚举的,而自定义的属性一般是可枚举的
可以通过propertylsEnumerable()方法判断该属性是否可枚举
属性的枚举性会影响以下三个函数的结果 (ES6标准入门P164)
1)for...in

      可遍历原型与实例上的所有可枚举属性

2)Object.keys();

      只能返回对象本身具有的可枚举属性。

3)JSON.stringify();

     只能读取对象本身的可枚举属性,并序列化为JSON对象。

4)Object.getOwnPropertyNames()

     遍历自身所有属性(不论是否是可枚举的),不包括原型链上面的.。

5)Object.assign() (es6新增)

      自身的可枚举属性。

posted @ 2022-08-25 10:49  拉布拉多~  阅读(3)  评论(0编辑  收藏  举报