概述
symbol是es6中新增的js的基礎資料型別,我們可以把它理解成類似字串,但是它的值是獨一無二的(一旦建立後,無法找到另乙個值與它相等),通常我們可以用它做物件的屬性
建立乙個symbol值symbol沒有字面量形式,同時因為它是普通型別也不能用new來生成。通常我們可以用全域性函式 symbol 來建立,用typeof來檢測型別
比如:
var a =
symbol()
; console.
log(a)
;// symbol()
typeof a;
// "symbol"
var b =
symbol()
; console.
log(a == b)
;// false
console.
log(a === b)
;// false
可以接收乙個引數,該引數不能描述值,只是除錯時便於識別
var c =
symbol
('name');
console.
log(c)
;// symbol(name)
var c =
symbol(2
);console.
log(c)
;// symbol(2)
var c =
symbol
(function()
);console.
log(c)
;// symbol(function() {})
var c =
symbol([
1,2,
'b']);
console.
log(c)
;// symbol(1,2,b)
#### 接下來我們來理解一下怎麼使用它
概述裡我們說過,它可以用來當作物件的屬性。
1、回想一下常規的物件屬性,是這樣的:
var obj =
a是乙個字串,我們可以這樣訪問 :
console.
log(obj.a)
// 11
也可以這樣修改它
obj.a =22;
console.
log(obj.a)
// 22
console.
log(obj)
//
2、symbol表示的物件屬性,是這樣的:
仔細看別眨眼哦
var a =
symbol()
;var obj =
我們是這樣訪問的:
console.
log(obj.a)
// 11
console.
log(obj[
'a']
)// 11
console.
log(obj[a]
)// 22
此時我們把symbol的值理解成乙個變數,用變數當物件的屬性,就好理解了。
共享es6提供『全域性登錄檔』,供你在任意時間點進行訪問,比如不同的 iframe 中可以訪問同乙個值。此時必須使用 symbol.for() 方法而不是symbol(),同時symbol.for() 僅接收單個字串型別的引數作為識別符號。
var a = symbol.
for(
'foo');
var obj =
console.
log(obj[a]
)// 11
console.
log(a)
// symbol.for(foo)
symbol.
keyfor
(a);
// 'foo'
symbol 型別轉換時非常不靈活,無法和其它型別轉換
var a =
symbol()
;console.
log(
+a);
// 報錯
console.
log(
''+ a)
;// 報錯
但是symbol支援 tostring和valueof
var a =
symbol()
;console.
log(a.
tostring()
);// "symbol()"
console.
log(a.
valueof()
);// symbol()
歡迎吐槽和指點 七種JS資料型別 Symbol
七種js資料型別 六種基本型別 string number boolean null undefined symbol es6新增 一種引用資料型別 boject array function 1 symbol函式前不能使用new關鍵字,否則會報錯,這是因為symbol是原始資料型別,而不是物件,所...
redis的七種資料結構
it168 技術 長生劍 孔雀翎 碧玉刀 多情環 離別鉤 霸王槍 拳頭是古龍筆下的七種 而本文打算將redis的幾種使用方式 strings hashs lists sets sorted sets pub sub transactions 也比作七種 為大家講解redis的七種特性,並列舉其適合的...
js五種資料型別及其轉換
簡單資料型別 number string boolean undefined null 複雜資料型別 object function number資料型別 int float 0.1 0.3!0.4 判斷乙個數是不是number型別有3種方法 parseint parsefloat number 其...