ES6中新的基本数据类型Symbol

4 篇文章 0 订阅

基本用法

let s1 = Symbol('foo')
let s2 = Symbol('foo')
s1 === s2 // fasle 

s1.description // "foo"

作为对象的属性名

let s1 = Symbol('foo')
let obj = {}
obj[s1] = 'hello world' // 以Symbol为键值

遍历对象中的Symbol key

通常方法只能遍历到普通的字符串属性,即for...in``for...of循环、Object.keys()Object.getOwnPropertyNames()JSON.stringify()
Object.getOwnPropertySymbols()Reflect.ownKeys() 这两个api可以访问到Symbol键名

let o={
    a:'abc',
    q:'qwe',
    [Symbol('foo')]:'sss'
}
Object.getOwnPropertySymbols(o) // [Symbol(foo)]
Reflect.ownKeys(o) // ["a", "q", Symbol(foo)]

Symbol.for() ,Symbol.keyfor()

Symbol.for("bar") === Symbol.for("bar") // true
Symbol("bar") === Symbol("bar") // false
Symbol.keyFor(Symbol.for("foo")) // "foo"

内置的Symbol值

Symbol.keyFor(Symbol.for("foo"))

Symbol.isConcatSpreadable

是一个布尔值,表示对象用于Array.prototype.concat()时,是否可以展开。(默认 undefined)

let arr=[1,2,3]
let a=[4,5]
a.concat(arr)
// [4, 5, 1, 2, 3]
a[Symbol.isConcatSpreadable]=false
a.concat(arr)
// (4) [Array(2), 1, 2, 3]
arr.concat(a)
// (4) [1, 2, 3, Array(2)]

Symbol.species

Symbol.match

Symbol.replace

Symbol.search

Symbol.search

Symbol.toPrimitive

Symbol.toStringTag

Symbol.unscopables

Symbol.iterator


阮一峰 ES6入门
MDN Symbol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值