ES6深入async函数和Symbol类型实例讲解,本文会简要介绍 async 函数和 ES6 的 Symbol 类型。
一、async 函数
其语法格式如下:
async function name([param[, param[, ... param]]]) { statements }
name: 函数名称。
param: 要传递给函数的参数的名称。
statements: 函数体语句。
返回值 async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。
二、async 案例
示例,新建一个名为 helloAsync.js 的文件,在其中写入以下代码。
// helloAsync.jsasync function helloAsync() { return "helloAsync";}console.log(helloAsync()); // Promise {<resolved>: "helloAsync"}helloAsync().then((v) => { console.log(v); // helloAsync});
在终端使用以下命令运行。
node helloAsync
可以看到,以下结果:
三、Symbol 类型
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:Undefined 、Null 、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
Symbol 值通过 Symbol
函数生成。对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,都是独一无二的,可以保证不会与其他属性名产生冲突。
四、Symbol 属性
创建 Symbol 类型的变量,语法如下:
var s = Symbol(["message"]);
Symbol
函数的 message 可以省略,表示对当前 Symbol 值的描述,用于区分 Symbol 变量。
示例,新建一个名为 test1.js 的文件,在其中写入以下代码。
// test1.jsvar p1 = Symbol();var p2 = Symbol("zhangsan");console.log(p1); // Symbol()console.log(p2); // Symbol(zhangsan)
在终端运行之后,会得到以下结果:
Symbol 类型还可以用于定义一组常量,保证这组常量的值都是不相等的。
示例,新建一个名为 test2.js 的文件,在其中写入以下代码。
// test2.jsconst log = {};log.levels = { DEBUG: Symbol("debug"), INFO: Symbol("info"), WARN: Symbol("warn"),};console.log(log.levels.DEBUG, "debug message");console.log(log.levels.INFO, "info message");
在终端运行之后,会得到以下结果:
五、Symbol 方法
其语法格式如下所示:
Symbol([description]);
ES5 时,声明对象属性通常使用的是字符串,ES6 中提供了 Symbol,使用 Symbol 可以作为对象的属性名。
示例,新建一个名为 test3.js 的文件,在其中写入以下代码。
// test3.jsvar pname = Symbol("lisi");var age = Symbol();var sex = Symbol();var person = { // 给 person 对象添加属性 pname 并赋值 [pname]: "zhangsan",};// 给 person 对象添加属性 age 并赋值person[age] = 18;// 给 person 对象添加属性 sex 并赋值Object.defineProperty(person, sex, { value: "male" });console.log(person[pname]); // 'zhangsan'console.log(person[age]); // 18console.log(person[sex]); // malevar p = Object.getOwnPropertySymbols(person);console.log(p); // Symbol(lisi), Symbol(), Symbol()
在终端运行之后,会得到以下结果:
六、其他
Symbol.for()
是接收一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值。Symbol()
写法没有登记机制,所以每次调用都会返回一个不同的值。
Symbol.keyFor()
是返回一个已登记的 Symbol 类型值的 key
。
示例,点击 File -> New File 新建一个名为 test4.js 的文件,在其中写入以下代码。
// test4.jsvar s1 = Symbol.for("aaa");var s2 = Symbol.for("aaa");console.log(s1 === s2); // truevar s3 = Symbol.for("aaa");console.log(Symbol.keyFor(s3)); // "aaa"var s4 = Symbol("aaa");console.log(Symbol.keyFor(s4)); // undefined
在终端运行之后,会得到以下结果:
总结
本文讲解了 async 函数的语法、案例;以及 ES6 的 Symbol 类型概念、属性、方法。
,可点击上面演示按钮看HTML页面效果,有需要可直接下载或开通SVIP终生会员全站免费下载。