ES6的Symbol資料型別的學習

2021-09-16 13:26:15 字數 2106 閱讀 5004

新的原始資料型別symbol,表示獨一無二的值

其他的資料型別包括undefined,null,string,number,boolean,object

let s = symbol() // 注意不能使用new,因為它不是物件

typeof s // 'symbol'

let s1 = symbol('foo')

s1 // symbol(foo)

// symbol引數是乙個物件,就會呼叫該物件的tostring()方法,然後才生成乙個symbol值

const obj =

}const sym = symbol(obj)

sym // symbol(abc)

let s2 = symbol('foo')

s1 === s2 // false

// symbol值不可以運算

console.log('your symbol ' + s1) // typeerror

// symbol可以顯式轉為字串

string(s1)

sym.tostring() // 'symbol(foo)'

// symbol可以轉為布林值,但是不能轉為數值

boolean(s) // true

!s // false

number(s) // typeerror

可以防止某乙個鍵被改寫或覆蓋

使用symbol值定義屬性時,symbol值必須放在方括號之中。

let mysym = symbol()

let a = {}

a[mysym] = 'hello'

let a =

// 注意點運算子,此時mysym是字串

a.mysym = 'hello'

a[mysym] // undefined

a['mysym'] // 'hello'

屬性名的遍歷

symbol作為屬性名,不會出現在for...infor...of迴圈中,也不會被object.keys()object.getownpropertynames()json.stringify()返回,有乙個object.getownpropertysymbols方法可以獲取symbol屬性名

let obj = {}

let foo = symbol('foo')

object.defineproperty(obj, foo, )

for (let i in obj)

object.getownpropertynames(obj) //

object.getownpropertysymbols(obj) // [symbol(foo)]

還有乙個全新的apireflect.ownkeys()可以返回所有型別的鍵名,包括常規鍵名和symbol鍵名

let obj = 

reflect.ownkeys(obj) // ['enum','nonenum',symbol(my_key)]

let s1 = symbol.for('foo') // 不會每次呼叫就返回乙個新的symbol型別的值

let s2 = symbol.for('bar') // 呼叫30次,每次都返回同乙個symbol值,但是symbol()會返回30個不同的symbol值

s1 === s2 //true

// 返回乙個已登記的symbol型別值的key

let s1 = symbol.for('foo')

symbol.keyfor(s1) // 'foo'

let s2 = symbol('foo')

symbol.keyfor(s2) // undefined

ES6 資料型別Symbol

1 symbol 定義的屬性,一般方法獲取不到 2 let name symbol 3 let obj 4 name 123 5 name 456 6 獲取symbol元素object.getownpropertysymbols 7object.getownpropertysymbols obj 8...

es6 新增的資料型別 symbol

應用場景 es5的物件屬性名都是字串,容易造成屬性名衝突 es6引入新的原始資料型別symbol,表示獨一無二的值 物件屬性名可以有兩種型別 1.字串 2.symbol型別 獨一無二,不會與其他屬性名產生衝突 描述 物件屬性名的問題 只會顯示lucy的名字 obj.name bob obj.name...

ES6新增的symbol資料型別

1 symbol的概念 在es5中,物件屬性名都是字串容易造成屬性名衝突。為了避免這種情況的發生,es6引入了一種新的原始資料型別symbol,表示獨一無二的值。symbol 函式返回的是 symbol 型別的值,該型別具有靜態方法和靜態屬性。let sy1 symbol winne let sy2...