中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6中的symbol如何用

發布時間:2022-04-26 10:07:33 來源:億速云 閱讀:173 作者:zzz 欄目:web開發

這篇文章主要介紹了es6中的symbol如何用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇es6中的symbol如何用文章都會有所收獲,下面我們一起來看看吧。

在es6中,Symbol可用于作為屬性名、定義變量或者常量,表示獨一無二的值,是es6中新增的數據類型,通過Symbol聲明的兩個變量永遠不可能相等,語法為“const name=Symbol("value")”。

本教程操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。

es6中symbol的用法是什么

什么是Symbol?

Symbol是es6中一種新增加的數據類型,它表示獨一無二的值。es5中我們把數據類型分為基本數據類型(字符串、數字、布爾、undefined、null)和引用數據類型(Object),在es6中新增的Symbol數據類型劃分到基本數據類型

為什么會有這樣一種數據類型呢?

//別人給了你一個定義好的對象
var obj = {
    name: "xiaoqiang",
    showName: function(){alert(1)}
}
//你拿到對象想給這對象添加新的屬性和方法的時候,可能會創建出一個name屬性和showName方法
obj.name = "nodeing"
obj.showName = function(){alert(2)}

//這個時候,新增加的方法和屬性就會去把原有的方法覆蓋,這樣就產生了沖突

由于對象的屬性和方法是字符串組成,這樣新增方法和屬性的時候有可能沖突,在es6中就新增了一種數據類型,表示獨一無二的值

通過Symbol函數可以創建一個獨一無二的值,每一次執行Symbol函數的時候返回的都是一個對象

let s1 = Symbol()
let s2 = Symbol()

console.log(s1 === s2) //false 說明創建出來的s1和s2 并不是相同的
console.log(s1, s2); //Symbol() Symbol()

上述代碼中,打印出來的值都是Symbol() , 怎樣才能區分誰是s1,誰是s2呢?我們可以通過傳參的形式來解決

//傳入的參數就是對當前Symbol的描述,用來區分Symbol
let s1 = Symbol("s1")
let s2 = Symbol("s2")
console.log(s1, s2);  //Symbol(s1) Symbol(s2)

應用場景

Symbol通常用于設置對象的屬性名或者方法,防止新加入的屬性或者方法與原來屬性或者方法沖突

let name = Symbol("name");
let show = Symbol("show");

let obj = {
    //設置屬性
    [name]: 'xiaoqiang',
    [show](){alert(1)}
};
//取值
console.log(obj[name]);
//調用方法
obj[show]()

這里要注意的是name的值必須是在[]中表示是可以改變的是一個變量

注意事項

注意1: Symbol里面的參數僅僅是對Symbol的描述,沒有其他意義,因此,即使描述相同,Symbol也是不同的

這里可以猜測Symbol這個函數的返回值是一個對象

console.log(Symbol("nodeing") === Symbol("nodeing")) //false

注意2:Symbol函數不能使用New關鍵字調用

let s1 = new Symbol(); //報錯

注意3: Symbol類型在做類型轉換的時候不能轉成數字

let s1 = Symbol("s1");
console.log(String(s1));  //Symbol(s1)
console.log(Boolean(s1));  //true
console.log(Number(s1)) //報錯

注意4: Symbol不能做任何運算(可能是返回值不可以運算)

console.log(Symbol("s1") + "nodeing") //報錯
console.log(Symbol("s1") - 100) //報錯

注意5: Symbol在作為對象屬性或者方法的時候,如果不賦值給一個變量的話,沒有辦法取值

let obj = {
    //設置屬性
    [Symbol("name")]: 'xiaoqiang'
};
//取值
console.log(obj[Symbol("name")]);

注意6: Symbol沒有辦法被for in循環遍歷

let name = Symbol('name')
let age = Symbol('age')
let obj = {
    a: 1,
    b: 2,
    [name]: 'xiaoqiang',
    [age]: 18
};
for(let attr in obj){
    console.log(attr,obj[attr])  //a b
}

可以使用Object.getOwnPropertySymbols查看對象上所有的symbol屬性

console.log(Object.getOwnPropertySymbols(obj))

關于“es6中的symbol如何用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“es6中的symbol如何用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗田县| 和田市| 凤凰县| 宜阳县| 屏东县| 腾冲县| 长泰县| 昌图县| 罗定市| 尖扎县| 金寨县| 大姚县| 岫岩| 铜山县| 平果县| 西藏| 阿拉善左旗| 奉新县| 富蕴县| 嘉义市| 乳源| 迭部县| 吴桥县| 汽车| 贵定县| 扶沟县| 扶绥县| 丹阳市| 丰宁| 鞍山市| 康乐县| 十堰市| 河北区| 蕉岭县| 木里| 石门县| 肥乡县| 丘北县| 中超| 尤溪县| 炎陵县|