Symbol
来源:互联网 发布:淘宝家具上新内容 编辑:程序博客网 时间:2024/06/14 00:34
Symbol
函数前不能使用new
命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。
注意,Symbol
函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol
函数的返回值是不相等的。
// 没有参数的情况var s1 = Symbol();var s2 = Symbol();s1 === s2 // false// 有参数的情况var s1 = Symbol('foo');var s2 = Symbol('foo');s1 === s2 // false
Symbol 值不能与其他类型的值进行运算,会报错。
var sym = Symbol('My symbol');"your symbol is " + sym// TypeError: can't convert symbol to string`your symbol is ${sym}`// TypeError: can't convert symbol to string
Symbol 值作为对象属性名时,不能用点运算符。
var mySymbol = Symbol();var a = {};a.mySymbol = 'Hello!';a[mySymbol] // undefineda['mySymbol'] // "Hello!"
上面代码中,因为点运算符后面总是字符串,所以不会读取mySymbol
作为标识名所指代的那个值,导致a
的属性名实际上是一个字符串,而不是一个 Symbol 值。
同理,在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中。
属性名的遍历
Symbol 作为属性名,该属性不会出现在for...in
、for...of
循环中,也不会被Object.keys()
、Object.getOwnPropertyNames()
、JSON.stringify()
返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols
方法,可以获取指定对象的所有 Symbol 属性名。
Object.getOwnPropertySymbols
方法返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
var obj = {};var a = Symbol('a');var b = Symbol('b');obj[a] = 'Hello';obj[b] = 'World';var objectSymbols = Object.getOwnPropertySymbols(obj);objectSymbols// [Symbol(a), Symbol(b)]对象的
Symbol.iterator
属性,指向该对象的默认遍历器方法class Collection { *[Symbol.iterator]() { let i = 0; while(this[i] !== undefined) { yield this[i]; ++i; } }}let myCollection = new Collection();myCollection[0] = 1;myCollection[1] = 2;for(let value of myCollection) { console.log(value);}
阅读全文
0 0
- symbol
- symbol
- Symbol
- symbol
- Symbol
- Symbol
- Symbol
- Symbol
- unresolved external symbol “symbol”
- unresolved symbol
- Symbol XML
- Symbol 開發初體驗
- symbol 分析
- unresolved symbol
- Undefined symbol
- 关于symbol
- Ruby Symbol
- Unknown symbol
- SQL Server数据库(对库,表,内容)的操作
- 情报收集--------------被动信息搜集
- POJ3279 Fliptile —— 状态压缩 + 模拟
- 冒烟测试和BAT测试
- CentOS安装教程
- Symbol
- C++中const在函数名前面和函数后面的区别
- leetcode 31 next permutation
- FlycoDialog 简单实用的自定义Android弹窗对话框(Dialog)
- TDSQL数据库分布式
- 解决searchView获取焦点时无法退出,拦截onkeyDown方法
- 懒加载,预加载实现以及对比
- jfinal上传带有文件的form表单获取不到model的问题
- SELECT语句的执行顺序