Symbol.for()方法:
使用Symbol()方法可以創建一個Symbol類型的值。
代碼實例如下:
let s = Symbol();let one = Symbol("武林網");let two = Symbol("武林網");console.log(one == two);
即便是鍵值相同兩個Symbol類型的值也是不相同的。
更多關于Symbol的內容可以參閱ES2015 Symbol一章節。
使用Symbol.for()方法也可以創建一個Symbol類型的值,但是此方法和Symbol()的一個重要區別是,它不會重復創建具有相同鍵的值,也就是說此方法在創建一個值之前,首先會搜索是否已經具有指定鍵的Symbol類型的值,如果有則返回這個Symbol值,否則新創建一個Symbol值。
代碼實例:
let one = Symbol.for("武林網");let two = Symbol.for("武林網");console.log(typeof one);console.log(one == two);
第一次調用Symbol.for()方法會創建一個鍵值為"武林網"的Symbol類型的值。
第二次調用的時候會搜索是否已經存在以"武林網"為鍵的Symbol類型的值,如果存在就返回這個Symbol值。
let one = Symbol.for();let two = Symbol.for();console.log(typeof one);console.log(one == two);
不傳遞參數也是同樣的道理。
let one = Symbol("武林網");let two = Symbol.for("武林網");console.log(one == two);
Symbol.for()創建的值會被登記在全局環境中供搜索,而Symbol()創建的值不會,所以Symbol.for("武林網")依然會新創建一個Symbol值,而不是返回Symbol("武林網")創建的值。
新聞熱點
疑難解答