摘要:一定義類型是新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值,其他的原始數(shù)據(jù)類型還有,屬于復(fù)雜數(shù)據(jù)類型。三值作為對(duì)象值作為屬性名時(shí)不能使用點(diǎn)運(yùn)算定義屬性時(shí),必須放在方括號(hào)內(nèi),與普通鍵值進(jìn)行區(qū)分。值可顯示地轉(zhuǎn)換成字符串??梢燥@示或隱式轉(zhuǎn)成,卻不能轉(zhuǎn)成數(shù)值。
一、定義
symbol類型是新的原始數(shù)據(jù)類型,表示獨(dú)一無二的值,其他的原始數(shù)據(jù)類型還有Number,String,Boolean,Null,Undefined;Object屬于復(fù)雜數(shù)據(jù)類型。
二、參數(shù)
1、Symbol函數(shù)接受字符串作為參數(shù),控制臺(tái)輸出時(shí),比較容易區(qū)分。
2、Symbol函數(shù)的參數(shù)僅表示Symbol值得描述,相同的參數(shù)返回值也不一樣
var a = Symbol("a"); var b = Symbol("a"); a === b //false
3、Symbol.for()可以生成同一個(gè)Symbol值。
請(qǐng)輸入代碼
var a = Symbol.for("a"); var b = Symbol.for("a"); a === b //true
Symbol.for()生成的名字是全局環(huán)境的,可以在不同的iframe中給取到值。
三、Symbol值作為對(duì)象
1、Symbol值作為屬性名時(shí)不能使用點(diǎn)運(yùn)算
2、定義屬性時(shí),必須放在方括號(hào)內(nèi),與普通鍵值進(jìn)行區(qū)分。
var a = Symbol("a"); var obj = { a: "normal key", [a]: "symbol key" }
3、Symbol值定義的屬性屬于公開屬性,普通方法無法遍歷。
//如上例 Obj.getOwnProperty() //["a"] Obj.getOwnPropertySymbols() //[Symbol("a")] Refelect.ownKeys() // ["a", Symbol("a")]
4、利用Symbol的特性可定義內(nèi)部私有屬性或方法
function getObj (obj) { let privateKey = symbol("privateKey"), objCopy = ...obj || {}; objCopy[privateKey] = function privateFunc () { console.log("privateFunc ") } return objCopy; } let newObj = getObj(); newObj[privateKey] // 報(bào)錯(cuò),外部無法獲取到privateKey的值 newObj[symbol("privateKey")] //undefined,此時(shí)的symbol已經(jīng)變成新的symbol值
三、注意點(diǎn)
1、Symbol值不能進(jìn)行隱式轉(zhuǎn)換,因此它與其他類型的值進(jìn)行運(yùn)算,會(huì)報(bào)錯(cuò)。
2、Symbol值可顯示地轉(zhuǎn)換成字符串。
var a = Symbol("a"); a.toString() // "Symbol(a)"
3、可以顯示或隱式轉(zhuǎn)成Boolen,卻不能轉(zhuǎn)成數(shù)值。
var a = Symbol("a"); Boolean(a) //true if (a) { console.log(a); } //Symbol("a") 打印出來地Symbol值會(huì)帶上參數(shù),便于區(qū)分
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109665.html
摘要:另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。因?yàn)橹稻哂形ㄒ恍?,這就意味著作為對(duì)象的屬性名時(shí),可以保證不會(huì)出現(xiàn)同名的屬性。不過,這個(gè)提議在中被拒絕了,也許之后的版本會(huì)再考慮。事實(shí)上,與都有語(yǔ)法解決構(gòu)造器中屬性名重復(fù)的問題。 譯者按: 這篇博客將介紹ES6新增的Object.assign()方法。 原文: ECMAScript 6: merging objects via Object...
摘要:實(shí)現(xiàn)原理創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說,遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。具體來說,就是返回一個(gè)包含和兩個(gè)屬性的對(duì)象。接口部署在對(duì)象的屬性上可以調(diào)用這個(gè)屬性,就得到遍歷器對(duì)象。 Iterator實(shí)現(xiàn)原理 創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說,遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。 第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一...
摘要:我們?cè)賮砘仡櫹挛氖滋岢龅倪@個(gè)比較運(yùn)算,首先為對(duì)象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對(duì)于右側(cè)的,首先會(huì)進(jìn)行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運(yùn)算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語(yǔ)法基礎(chǔ)與工程實(shí)踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運(yùn)算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:我們?cè)賮砘仡櫹挛氖滋岢龅倪@個(gè)比較運(yùn)算,首先為對(duì)象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對(duì)于右側(cè)的,首先會(huì)進(jìn)行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運(yùn)算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語(yǔ)法基礎(chǔ)與工程實(shí)踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運(yùn)算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代開發(fā)語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對(duì)未聲明的變量賦值。按值傳遞中函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代 JavaScript 開發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...
閱讀 3249·2021-11-22 12:07
閱讀 1892·2021-10-12 10:11
閱讀 1056·2019-08-30 15:44
閱讀 2953·2019-08-30 12:45
閱讀 2227·2019-08-29 16:41
閱讀 1648·2019-08-29 16:35
閱讀 2641·2019-08-29 12:57
閱讀 1161·2019-08-26 13:51