Symbol.for() 方法

admin發表於2019-05-07

使用Symbol()方法可以建立一個Symbol型別的值。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
let s = Symbol();
let one = Symbol("螞蟻部落");
let two = Symbol("螞蟻部落");
console.log(one == two);

即便是鍵值相同兩個Symbol型別的值也是不相同的。

更多關於Symbol的內容可以參閱ES2015 Symbol一章節。

使用Symbol.for()方法也可以建立一個Symbol型別的值,但是此方法和Symbol()的一個重要區別是,它不會重複建立具有相同鍵的值,也就是說此方法在建立一個值之前,首先會搜尋是否已經具有指定鍵的Symbol型別的值,如果有則返回這個Symbol值,否則新建立一個Symbol值。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let one = Symbol.for("螞蟻部落");
let two = Symbol.for("螞蟻部落");
console.log(typeof one);
console.log(one == two);

第一次呼叫Symbol.for()方法會建立一個鍵值為"螞蟻部落"的Symbol型別的值。

第二次呼叫的時候會搜尋是否已經存在以"螞蟻部落"為鍵的Symbol型別的值,如果存在就返回這個Symbol值。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let one = Symbol.for();
let two = Symbol.for();
console.log(typeof one);
console.log(one == two);

不傳遞引數也是同樣的道理。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let one = Symbol("螞蟻部落");
let two = Symbol.for("螞蟻部落");
console.log(one == two);

Symbol.for()建立的值會被登記在全域性環境中供搜尋,而Symbol()建立的值不會,所以Symbol.for("螞蟻部落")依然會新建立一個Symbol值,而不是返回Symbol("螞蟻部落")建立的值。

相關文章