Symbol常用總結

2021-10-24 05:02:02 字數 4170 閱讀 4750

symbol是一種基本資料型別,常常用symbol([description])返回乙個symbol型別的值。

// 只能通過 變數 來獲取值。(還有一種,後面說道)

let n =

symbol

('a');

let obj =

console.

log( obj[n]

)

symbol類似於內建物件類,具有constructor(symbol.prototype),但不能new

var sym =

newsymbol()

;// typeerror

let n =

symbol()

;// 返回乙個唯一值。

let m =

symbol

('aa');

symbol

('foo'

)===

symbol

('foo'

)// false

乙個應用場景

// redux

//let v_d = 'vvv_ddd';

let v_d =

symbol

('vvv_ddd');

switch

(active.type)

當轉為number值時,會拋錯。轉字串時也會出錯。

// symbol 不能參與運算

let n =

symbol()

console.

log( n +12)

// typeerror

console.

log( n +

'uzi'

)// typeerror

number

(n)// typeerror

// 下面的可以執行

string

(n)// "symbol()"

object

(n)// symbol

boolean

(n)// true

for...in語句可以用來迭代 陣列、類陣列、字串等可以進行迭代迴圈,他們有乙個共同點:具備可列舉性。

for...inobject.keys(obj)object.getownpropertynames(obj)均無法遍歷到 symbol 型別值。

我們可以用過object.getownpropertysymbols(obj)來返回獲取其包含symbol型別值的陣列。

// 可被迭代物件:擁有symbol.iterator這個屬性。

let n =

symbol

('a');

let obj =

// 拿symbol的另一種方法。

let symbolarr = object.

getownpropertysymbols

(obj)

// 獲取symbol的 鍵

symbolarr.

foreach

( item =>

)

注意:當物件含有symbol型別值的鍵值對時,使用深轉殖(json)會轉殖不到symbol型別的值。

let n =

symbol

('a');

let obj =

json

.parse

(json

.stringify

(obj)

)

symbol 的hasinstance屬性。

判斷某物件是否為某構造器的例項。

let obj =

console.

log( obj instanceof

object

)// true

// instanceof 的實現原理就是 依據 symbol.hasinstance 進行判斷。

// 使用 instanceof 就會預設呼叫 symbol.hasinstance

console.

log( object[symbol.hasinstance]

(obj)

)// true

// eg2

class

person

let p1 =

newperson

;console.

log( p1 instanceof

person

)// true

console.

log( person[symbol.hasinstance]

(p1)

)// true

symbol的isconcatspreadable屬性,值為布林值,表示該物件用於array.prototype.concat()時,是否可以展開。

const alpha =

['a'

,'b'

,'c'];

const numeric =[1

,2,3

];let alphanumeric = alpha.

concat

(numeric)

;numeric[symbol.isconcatspreadable]

=false

// 該陣列不展開

console.

log( alpha.

concat

(numeric)

)

symbol.iterator擁有該屬性的物件被稱作為可被迭代的物件,可以使用for...of迴圈。

// 所有可被迭代的物件才能用 for of 迴圈

// 可被得迭代的物件:擁有symbol.iterator這個屬性。

let obj =

for(

let item in obj )

symbol.toprimitive該物件被轉化成原始型別的值的時候,會呼叫這個方法,返回該物件對應的原始型別值。

hint:表示要轉換到的原始值的預期型別。 hint 引數的取值是 「number」、「string」 和 「default」 中的任意乙個。

let a =

}// a 會轉換型別,觸發 symbol.toprimitive

if( a ==

1&& a ==

2&& a ==3)

注:在進行型別轉化的時候,若沒有symbol.toprimitive,則會呼叫valueof(){}

let a =}if

( a ==

1&& a ==

2&& a ==3)

symbol.tostringtag在該物件上面呼叫object.prototype.tostring方法時,如果屬性存在,它的返回值會出現在tostring的返回值的字串之中,表示物件的型別。

class

person

let p =

newperson()

console.

log( object.prototype.tostring.

call

(p))

// [object object]

// 擁有自己像設定的型別

class

person

}let p =

newperson()

console.

log( object.prototype.tostring.

call

(p))

// [object person]

ES6 symbol 以及symbol的簡單應用

1.es6 引入了一種新的原始資料型別symbol,表示獨一無二的值。2.symbol 值通過symbol函式生成。3.symbol 函式可以接受乙個字串作為引數,表示對 symbol 例項的描述,主要是為了在控制台顯示,或者轉為字串時,比較容易區分。4.es2019 提供了乙個例項屬性descri...

make 知識點 symbol 常用符號問題

1.symbol is for target now is edit is for the whole prerequisties now is hello.j a hi.j a work.j a is for the first prerequistie now is hello.j a exam...

Ruby 學習筆記 Symbol

ruby 學習筆記 symbol symbol 在 ruby 中是由乙個標示符前面加乙個冒號 組成的。從程式設計師的角度說它不是字串,不是變數,不是常量,他僅是個名字,它的值是它自己。從直譯器的角度說,它是乙個指向乙個 symbol table 的指標,這個 symbol table 是乙個ruby...