JavaScriptES6Symbol终极教程

今天我们将学习JavaScript的新Symbol基本类型。
我们可以使用Symbol创建唯一值作为对象属性或值Symbol已知可以修改JS语言的内部逻辑。

创建Symbol

ES6添加了Symbol作为原始数据类型以及其他原始数据类型,例如Number、Boolean、Null、Undefined和String。
符号类型没有文字形式。

要创建符号,我们需要使用全局函数Symbol()

lets=Symbol('foo');

每次使用Symbol()功能被称为“创造新的独特价值”。

console.log(Symbol()===Symbol());//false

Symbol()函数接受一个可选参数作为描述,使得Symbol更具语义性。

创建下面两个符号:firstName和lastName。

letfirstName=Symbol('firstname'),lastName=Symbol('lastname');

当我们使用时当您使用console.log()打印符号时,会隐式调用该符号的toString()方法。

console.log(firstName);//Symbol(firstname)console.log(lastName);//Symbol(lastname)

由于symbol是一个原始值,我们可以使用typeof为了检查其类型,ES6还扩展了typeof关键字,并在遇到符号类型时返回sy。
mbol

console.log(typeoffirstName);//symbol

由于它是原始类型,所以不能用new创建

lets=newSymbol();//错误共享符号

要创建共享符号,请使用Symbol.for()函数而不是Symbol()。

Symbol.for()还接受可选参数作为描述

letssn=Symbol.for('ssn');

Symbol.for()首先,进行全局搜索以查看是否存在所创建的SSN的符号。
如果没有,则创建一个新符号。

接下来我们创建相同的符号,然后检查它是否是相同的符号

letnz=Symbol.for('ssn');console.log(ssn===nz);//true

由于上面创建了ssn的符号,因此nz变量的符号与上面创建的相同。

如果想获取符号的key,可以使用Symbol.keyFor()

console.log(Symbol.keyFor(nz));//'ssn'

<方法/p>

请注意,如果符号是通过Symbol()创建的,则使用Symbol.keyFor()返回未定义

letsystemID=Symbol('sys');console.log(Symbol.keyFor(systemID));//未定义符号是用来做什么的?1)使用符号作为唯一值

我们经常在代码中使用字符串或数字来表示一些状态,我们经常面临缺乏语义或重复定义的问题。
此时,使用符号是最好的选择。
每个新创建的符号都是唯一的,不会重复。
我们可以通过它向Symbol输入相应的描述。

请参阅下面的示例。
我们使用Symbol来表达订单的多种状态,而不是字符串和数字。

console.log(Symbol()===Symbol());//false02)Symbol作为对象属性use

使用symbol作为属性名

console.log(Symbol()===Symbol());//false1

对所有可枚举使用Object.keys()对象的属性

console.log(Symbol()===Symbol());//false2

使用Object.getOwnPropertyNames()获取所有属性,无论是否可枚举

console.log(Symbol()===Symbol());//false3

然后要在对象中使用Symbol属性,需要获取ES6中新使用的对象t.getOwnPropertySymbols()方法

console.log(Symbol()===Symbol());//false4Well-knownsymbol

ES6定义符号原型链中的相关属性能够揭示更多语言的内部逻辑。
wellknownSymbol为标准对象定义了一些以前仅在语言中可见的函数。

Symbol.hasInstance

Symbol.hasInstance是一个更改实例运算符默认行为的符号。
通常我们使用这样的实例:

console.log(Symbol()===Symbol());//false5

然后JavaScript执行Symbol.hasIntance方法。
如下

console.log(Symbol()===Symbol());//false6

会调用类型为obj的静态方法Symbol.hasInstance作为参数

console.log(Symbol()===Symbol());//false7

[]数组不是Stack类创建的实例,所以会返回false

JavaScript基础教程(第8版)目录

JavaScript基础教程(第8版)目录概述

第1章,深入理解JavaScript:

1.1JavaScript基本介绍1.2JavaScript和Java之间的差异1.6AJAX限制概述1.7集成编程概念1.7.1JavaScript对象1.7.2属性和方法的使用1.7.3DOM简介1.8处理用户交互1.9数据类型和变量

第2章,JavaScript编程从以下内容开始:

2.1脚本布局和加载2.2函数基础知识2.3外部脚本引用2.4使用注释2.5错误处理并显示警告问题2.6确认用户交互2.7循环和重定向

第3章,构建您的第一个Web应用程序:

3.1循环和递归任务内容

第4章,图像处理和交互:

4.1图像反转效果4.2广告轮播和幻灯片4.3窗框工程

第5章,表格处理和验证:

附录部分,深入研究和设备介绍:

JavaScript版本的演变b.保留字和参考文献c.CSS相关知识D.学习资源推荐