js中Symbol的作用

JavaScript07

js中Symbol的作用,第1张

唯一标识符,可用作对象的唯一属性值

// Here are two symbols with the same description:

console.log(Sym1===Sym2)// returns "false"// Symbols are guaranteed to be unique.// Even if we create many symbols with the same description,// they are different values.

Symbol 是一种解决命名冲突的工具。试想我们以前定义一个对象方法的时候总是要检查是否已存在同名变量:

可是这样写,即便已存在同名方法,但他们实现的功能不一定一样,而且函数的接口也不一定适合自己。这样我们就不得不再给自己的函数起个其他的名字,可以万一又存在呢?

于是引入了 Symol,用来产生一个全局唯一的标识符,你可以放心的使用它。

它接受一个字符串参数,作为该标识符的描述:

描述符是用来帮助开发人员区别不同是 symbol,不具备其他意义, 所以 symbol 值只有 toString() 和 valueOf() 方法。

Symbol 作为一个基本类型存在于 js 中。这样,js 就有了6个基本类型: null , undefined , Boolean , Number , String , Symbol 和1个复杂类型: Object

使用 Symbol 需要注意以下几点:

这个应该不陌生了,和普通标识符用法类似,只是不能使用 . 访问和定义,必须使用 [] :

当然也可以定义一些常量,就像英语中 Symbol 代表一种象征,一个符号:

需要注意,Symbol 属性只有 Object.getOwnPropertySymbols(obj) 和 Reflect.ownKey(obj) 可以遍历到:

我们可以利用这个方法,构造一些非私有的内部变量:

注意 Symbol 的登记是全局的:

ES6 提供了12个内置的 Symbol 值,这12个值,都是对象的,且都不可枚举、不可配置、不可修改。因为它们具有其特殊意义:

对于一个类而言,该属性必须返回 boolean 类型

ES6 新增的 Symbol.toStringTag 如下:

https://www.cnblogs.com/sqh17/p/8529401.html

1、splice(start,deletecount,item) 会改变原数组的方法。

arr.splice(i,n) 删除从i(索引值)开始之后的那个元素。返回值是删除的元素

参数: i 索引值 n 个数

splice(start,deletecount,item)方法:

2、split()是使用指定的分隔符字符串将字符串分割成子字符串,返回一个子字符串数组。

3、slice()方法可以对数组或字符串截取。

arr.slice(start,end) 切去索引值start到索引值end的数组,不包含end索引的值,返回值是切出来的数组。

** 2. 提取某个字符串的一部分,并返回一个新的字符串,不会改变原字符串。**

# ES6 symbol类型详解

https://juejin.cn/post/6925619440843227143

1、 定义:

symbol类型是新的原始数据类型,表示独一无二的值,其他的原始数据类型还有Number,String,Boolean,Null,Undefined;Object属于复杂数据类型。

2、symbols 作为对象的属性

3、利用Symbol的特性可定义内部私有属性或方法

forEach:没有返回值, 但不能使用break、continue和return语句

for…in:遍历数组索引、对象的属性。使用for…in遍历时,原型链上的所有属性都将被访问。

map: 有返回值。并且可以返回一个结果数组。但是map 遍历对象的话也会报错,所以map只能循环数组或者对象数组。

for...of :创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,并支持新的迭代协议。for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

循环返回的是value。

Maps(映射)

Map 对象就是保存 key-value(键值) 对。对象和原始值可以用作 key(键)或 value(值)。Map 对象根据其插入方式迭代元素。换句话说, for...of 循环将为每次迭代返回一个 key-value(键值) 数组。

Set(集合)

Set(集合) 对象允许你存储任何类型的唯一值,这些值可以是原始值或对象。 Set(集合) 对象只是值的集合。 Set(集合) 元素的迭代基于其插入顺序。 Set(集合) 中的值只能发生一次。如果您创建一个具有多个相同元素的 Set(集合) ,那么它仍然被认为是单个元素。

三、JavaScript Map 和 Object 的区别( https://www.cnblogs.com/ysx215/p/11387938.html )

在 Object 中, key 必须是简单数据类型(整数,字符串或者是 symbol),而在 Map 中则可以是 JavaScript 支持的所有数据类型,也就是说可以用一个 Object 来当做一个Map元素的 key。

Map 元素的顺序遵循插入的顺序,而 Object 的则没有这一特性。

Map 继承自 Object 对象。