首页
学习
活动
专区
工具
TVP
发布

Javascript Symbol 解惑 什么是Symbol创建Symbol如何使用Symbol

但是 Symbol 只能通过构造函数 Symbol() 进行创建: const sym = Symbol(); 或者,我们可以传入一个字符串参数(descriptor)用于描述该Symbol: const...sym = Symbol('cat'); 注意:传入的参数对 Symbol 值的产生并无影响,因为就算每次传入的参数都一样,生成的Symbol值也是不等的。...所以,下列等式结果为 false: Symbol('cat') === Symbol('cat') // false Symbol.for(key) 和 Symbol() 类似,Symbol.for(key...) 也可以创建一个Symbol,不一样的是:创建的 Symbol 是全局的(在全局Symbol表中注册),而如果全局已经存在相同 key 的Symbol,则直接返回该Symbol。...所以,下列等式结果为 true: Symbol.for('cat') === Symbol.for('cat') // true 如何使用Symbol 其实 Symbol 本身很简单,但是如何把它用好、

2.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

Symbol

Symbol.png Symbol 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突 Symbol的引入,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突 它是 JavaScript...Symbol 值不是对象,所以不能添加属性 Symbol 值不能与其他类型的值进行运算,会报错 Symbol 值可以显式转为字符串 Symbol 值也可以转为布尔值,但是不能转为数值 作为属性名的 Symbol...键名 Symbol.for(),Symbol.keyFor() 我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点 它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的...Symbol 值 如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 SymbolSymbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的...内置的 Symbol 值 除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法 对象的Symbol.hasInstance属性,指向一个内部方法

76920

Symbol.iterator和Symbol.asyncIterator

Symbol是什么?symbol是ES6标准中新增的一种基本数据类型,symbol 的值是通过 Symbol()函数返回的,每一个 symbol 的值都是唯一的,即使传入相同的描述值。...注:Symbol 函数不允许通过 new 的方式调用Symbol的作用是什么?因为每一个 symbol 的值都是唯一的,所以不会出现重复的现象,所以symbol 类型的值可以作为对象的属性标识符使用。...Symbol.iterator是如何实现遍历的呢?...Symbol.asyncIteratorSymbol.asyncIterator 符号用于标识一个异步迭代器,作用与 Symbol.iterator 相同,但产生的值期待为 Promise 实例,该异步迭代器被...和Symbol.iterator一样都会返回一个对象,一个遍历器对象,同样在Symbol.asyncIterator里也有有一个next()方法,不同的是Symbol.asyncIterator里面返回的

10920

元编程之symbol

甚至还可以有obj['Symbol()'] = 1这种操作: 在react打印出来的组件对象里面,也可以看见一些symbol的属性。 ?...但是,想像其他变量那样子用怎么办,也就是以不同姿势使用同样的方法,期望得到同样的值,期望近似与symbol('a')和symbol('a')是完全相等这种效果 这时候,Symbol.for刚刚好满足需求了...: const a = Symbol.for('im not alone') const b = Symbol.for('im not alone') a === b 这下symbol就是有点简单数据类型的感觉了吧...Symbol.iterator 这个属性,是一个当前对象默认的遍历器生成函数,所以我们用obj[Symbol.iterator]可以访问到它。...而Symbol也有这种操作到更底层的方法:Symbol.toPrimitive,可以自定义 // 不玩包装类的string var s = new String(''); s[Symbol.toPrimitive

56320
领券