亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

侯马市| 开平市| 仲巴县| 珲春市| 钟山县| 柳州市| 栖霞市| 永安市| 商南县| 佛山市| 尼勒克县| 左云县| 改则县| 舟山市| 墨竹工卡县| 泰顺县| 精河县| 阜新市| 临海市| 郴州市| 梅州市| 古浪县| 阿克苏市| 林西县| 延吉市| 临湘市| 旌德县| 江源县| 洛川县| 锦屏县| 津市市| 英超| 仁怀市| 招远市| 加查县| 九龙坡区| 全州县| 南安市| 宽甸| 尤溪县| 北海市|