亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
聲明方式
Symbol.for()全局定義Symbol
Symbol.keyFor()
應(yīng)用場(chǎng)景
作為屬性名
屬性遍歷
消除魔術(shù)字符串
首頁(yè) web前端 js教程 javascript數(shù)據(jù)類型學(xué)習(xí)之淺析Symbol類型

javascript數(shù)據(jù)類型學(xué)習(xí)之淺析Symbol類型

Mar 18, 2022 am 11:01 AM
es6 javascript symbol類型 數(shù)據(jù)類型

本篇文章帶大家了解一下ES6新增的數(shù)據(jù)類型:Symbol,聊聊Symbol類型的聲明方式和使用方法,希望對(duì)大家有所幫助!

javascript數(shù)據(jù)類型學(xué)習(xí)之淺析Symbol類型

Symbol一種新的原始數(shù)據(jù)類型,表示獨(dú)一無(wú)二的。是javascript中第七種數(shù)據(jù)類型。另外六種分別是:undefined、null、String、Number、Object

聲明方式

Symbol值通過(guò)Symbol函數(shù)生成。對(duì)象的屬性名可以有兩種類型,一種是原來(lái)就有的字符串,另一種就是新增的 Symbol 類型。屬性名屬于 Symbol 類型的,都是獨(dú)一無(wú)二的,可以保證不會(huì)與其他屬性名產(chǎn)生沖突?!鞠嚓P(guān)推薦:javascript學(xué)習(xí)教程

let?s1=Symbol()
let?s2=Symbol()
console.log(s1)
//Symbol()
console.log(s2)
//Symbol()
console.log(s1===s2)
//false

//Symbol函數(shù)能接受字符串作為參數(shù),表示對(duì)Symbol實(shí)例的描述
let?s1=Symbol('xxx')
let?s2=Symbol('hhh')
console.log(s1)
//Symbol(xxx)
console.log(s2)
//Symbol(hhh)
console.log(s1===s2)
//false復(fù)制代碼

Symbol函數(shù)前不能使用new命令,會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻?Symbol 是一個(gè)原始類型的值,不是對(duì)象。也就是說(shuō),由于 Symbol 值不是對(duì)象,所以不能添加屬性。相當(dāng)于是一種特殊的字符串。

Symbol.for()全局定義Symbol

Symbol.for() 接受一個(gè)字符串作為參數(shù),然后搜索有沒(méi)有以該參數(shù)作為名稱的 Symbol 值。如果有,就返回這個(gè) Symbol 值,否則就新建一個(gè)以該字符串為名稱的 Symbol 值,并將其注冊(cè)到全局。

let s1 = Symbol.for('xxx')
let s2 = Symbol.for('xxx')
console.log(s1 === s2) // true


function foo(){
    return Symbol.for('hello')
}
const x=foo()
const y=Symbol.for('hello')
console.log(x === y)//true

Symbol.for()與Symbol()這兩種寫(xiě)法,都會(huì)生成新的 Symbol。區(qū)別是,前者會(huì)被登記在全局環(huán)境中供搜索,后者就不會(huì)。Symbol.for()不會(huì)每次調(diào)用就返回一個(gè)新的 Symbol 類型的值,而是會(huì)先檢查給定的key是否已經(jīng)存在,不存在才會(huì)新建一個(gè)值。

Symbol.keyFor()

Symbol.keyFor()方法返回一個(gè)已經(jīng)登記的 Symbol 類型值的key。

const s1 = Symbol('foo')
console.log(Symbol.keyFor(s1)) // undefined

const s2 = Symbol.for('foo')
console.log(Symbol.keyFor(s2)) // foo

應(yīng)用場(chǎng)景

作為屬性名

由于 Symbol 值都是不相等的,這意味著 Symbol 值可以作為標(biāo)識(shí)符,用在對(duì)象的屬性名,就能保證不會(huì)出現(xiàn)同名的屬性。這對(duì)于一個(gè)對(duì)象由多個(gè)模塊構(gòu)成的情況非常有用,防止某一個(gè)鍵被不小心改寫(xiě)或覆蓋。

const grade={
    張三:{address:'qqq',tel:'111'},
    李四:{address:'aaa',tel:'222'},
    李四:{address:'sss',tel:'333'},
}
console.log(grade)
//張三: {address: "qqq", tel: "111"} 李四: {address: "sss", tel: "333"}
//對(duì)象的key值不能重復(fù) 如果有重復(fù) 后面的value值就會(huì)覆蓋前面的


//使用Symbol解決,相當(dāng)于一個(gè)獨(dú)一無(wú)二的字符串
const stu1=Symbol('李四')
const stu2=Symbol('李四')
console.log(stu1===stu2)
//false
const grade={
    [stu1]:{address:'aaa',tel:'222'},
    [stu2]:{address:'sss',tel:'333'},
}
console.log(grade)
//李四:{address:'sss',tel:'222'} 李四:{address:'sss',tel:'333'}
console.log(grade[stu1])
//李四:{address:'sss',tel:'222'}
console.log(grade[stu2])
//李四:{address:'sss',tel:'333'}

屬性遍歷

const sym=Symbol('imooc')
class User{
    constructor(name){
        this.name=name
        this[sym]='imooc.com'
    }
    getName(){
        return this.name+this[sym]
    }
}
const user=new User('www')

//for in的方法不能遍歷到Symbol屬性 像被隱藏了
for(let key in user){
    console.log(key)//name 
}

//Object.keys(obj)方法也不能遍歷到Symbol屬性
for(let key of Object.keys(user)){
    console.log(key)//name 
}

//Object.getOwnPropertySymbols(obj)只能獲取到Symbol屬性
for(let key of Object.getOwnPropertySymbols(user)){
    console.log(key)//Symbol(imooc) 
}

//Reflect.ownKeys(obj)對(duì)象的屬性都能獲取到
for(let key of Reflect.ownKeys(user)){
    console.log(key)
    //name 
    //Symbol(imooc) 
}

消除魔術(shù)字符串

魔術(shù)字符串指的是,在代碼中多次出現(xiàn)、與代碼形成強(qiáng)耦合的某一個(gè)具體的字符串或者數(shù)值。風(fēng)格良好的代碼,應(yīng)該盡量消除魔術(shù)字符串,改成一些含義清晰的變量代替。

function getArea(shape) {
    let area = 0
    switch (shape) {
        case 'Triangle':
            area = 1
            break
        case 'Circle':
            area = 2
            break
    }
    return area
}
console.log(getArea('Triangle'))
//Triangle和Circle就是魔術(shù)字符串。多次出現(xiàn),與代碼形成了“強(qiáng)耦合”,不利于后面的修改和維護(hù)。

const shapeType = {
    triangle: Symbol(),
    circle: Symbol()
}

function getArea(shape) {
    let area = 0
    switch (shape) {
        case shapeType.triangle:
            area = 1
            break
        case shapeType.circle:
            area = 2
            break
    }
    return area
}
console.log(getArea(shapeType.triangle))

一個(gè)前端小白,若文章有錯(cuò)誤內(nèi)容,歡迎大佬指點(diǎn)討論!

【相關(guān)視頻教程推薦:web前端

以上是javascript數(shù)據(jù)類型學(xué)習(xí)之淺析Symbol類型的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1597
29
PHP教程
1488
72
MySQL數(shù)據(jù)庫(kù)中性別字段應(yīng)該使用什么數(shù)據(jù)類型? MySQL數(shù)據(jù)庫(kù)中性別字段應(yīng)該使用什么數(shù)據(jù)類型? Mar 14, 2024 pm 01:21 PM

在MySQL數(shù)據(jù)庫(kù)中,性別字段通常可以使用ENUM類型來(lái)存儲(chǔ)。ENUM是一種枚舉類型,它允許我們?cè)谝唤M預(yù)定義的值中選擇一個(gè)作為字段的值。在表示性別這樣一個(gè)固定且有限的選項(xiàng)時(shí),ENUM是一個(gè)很好的選擇。讓我們來(lái)看一個(gè)具體的代碼示例:假設(shè)我們有一個(gè)名為"users"的表,其中包含了用戶的信息,包括性別。現(xiàn)在我們要為性別創(chuàng)建一個(gè)字段,我們可以這樣設(shè)計(jì)表結(jié)構(gòu):CRE

MySQL中最適合用于性別字段的數(shù)據(jù)類型是什么? MySQL中最適合用于性別字段的數(shù)據(jù)類型是什么? Mar 15, 2024 am 10:24 AM

在MySQL中,最適合用于性別字段的數(shù)據(jù)類型是ENUM枚舉類型。ENUM枚舉類型是一種允許定義一組可能取值的數(shù)據(jù)類型,性別字段適合使用ENUM類型是因?yàn)樾詣e通常僅有兩個(gè)取值,即男和女。接下來(lái),我將通過(guò)具體的代碼示例來(lái)展示如何在MySQL中創(chuàng)建一個(gè)性別字段并使用ENUM枚舉類型存儲(chǔ)性別信息。以下是操作步驟:首先,在MySQL中創(chuàng)建一個(gè)名為users的表格,包括

Python 語(yǔ)法的思維導(dǎo)圖:深入理解代碼結(jié)構(gòu) Python 語(yǔ)法的思維導(dǎo)圖:深入理解代碼結(jié)構(gòu) Feb 21, 2024 am 09:00 AM

python憑借其簡(jiǎn)單易讀的語(yǔ)法,廣泛應(yīng)用于廣泛的領(lǐng)域中。掌握Python語(yǔ)法的基礎(chǔ)結(jié)構(gòu)至關(guān)重要,既可以提高編程效率,又能深入理解代碼的運(yùn)作方式。為此,本文提供了一個(gè)全面的思維導(dǎo)圖,詳細(xì)闡述了Python語(yǔ)法的各個(gè)方面。變量和數(shù)據(jù)類型變量是Python中用于存儲(chǔ)數(shù)據(jù)的容器。思維導(dǎo)圖展示了常見(jiàn)的Python數(shù)據(jù)類型,包括整數(shù)、浮點(diǎn)數(shù)、字符串、布爾值和列表。每個(gè)數(shù)據(jù)類型都有其自身的特性和操作方法。運(yùn)算符運(yùn)算符用于對(duì)數(shù)據(jù)類型執(zhí)行各種操作。思維導(dǎo)圖涵蓋了Python中的不同運(yùn)算符類型,例如算術(shù)運(yùn)算符、比

MySQL中布爾類型的使用方法詳解 MySQL中布爾類型的使用方法詳解 Mar 15, 2024 am 11:45 AM

MySQL中布爾類型的使用方法詳解MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在實(shí)際應(yīng)用中經(jīng)常需要使用布爾類型來(lái)表示邏輯上的真假值。MySQL中布爾類型有兩種表示方式:TINYINT(1)和BOOL。本文將詳細(xì)介紹MySQL中布爾類型的使用方法,包括布爾類型的定義、賦值、查詢和修改等操作,同時(shí)結(jié)合具體的代碼示例進(jìn)行說(shuō)明。1.布爾類型的定義在MySQL中,可

MySQL中性別字段最佳數(shù)據(jù)類型選擇是什么? MySQL中性別字段最佳數(shù)據(jù)類型選擇是什么? Mar 14, 2024 pm 01:24 PM

在設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí),選擇合適的數(shù)據(jù)類型對(duì)于性能優(yōu)化和數(shù)據(jù)存儲(chǔ)效率非常重要。在MySQL數(shù)據(jù)庫(kù)中,存儲(chǔ)性別字段的數(shù)據(jù)類型真是沒(méi)有所謂的最佳選擇,因?yàn)樾詣e字段一般只有兩個(gè)取值:男或女。但是為了效率和節(jié)省空間,我們可以選擇合適的數(shù)據(jù)類型來(lái)存儲(chǔ)性別字段。在MySQL中,存儲(chǔ)性別字段最常用的數(shù)據(jù)類型是枚舉類型。枚舉類型是一種能夠把字段的值限定在一個(gè)有限的集合內(nèi)的數(shù)據(jù)類型

揭秘主流編程語(yǔ)言中的基本數(shù)據(jù)類型分類 揭秘主流編程語(yǔ)言中的基本數(shù)據(jù)類型分類 Feb 18, 2024 pm 10:34 PM

標(biāo)題:基本數(shù)據(jù)類型大揭秘:了解主流編程語(yǔ)言中的分類正文:在各種編程語(yǔ)言中,數(shù)據(jù)類型是非常重要的概念,它定義了可以在程序中使用的不同類型的數(shù)據(jù)。對(duì)于程序員來(lái)說(shuō),了解主流編程語(yǔ)言中的基本數(shù)據(jù)類型是建立堅(jiān)實(shí)程序基礎(chǔ)的第一步。目前,大多數(shù)主流編程語(yǔ)言都支持一些基本的數(shù)據(jù)類型,它們?cè)谡Z(yǔ)言之間可能有所差異,但主要概念是相似的。這些基本數(shù)據(jù)類型通常被分為幾個(gè)類別,包括整數(shù)

C語(yǔ)言的基本語(yǔ)法和數(shù)據(jù)類型介紹 C語(yǔ)言的基本語(yǔ)法和數(shù)據(jù)類型介紹 Mar 18, 2024 pm 04:03 PM

C語(yǔ)言是一種廣泛使用的計(jì)算機(jī)編程語(yǔ)言,具有高效、靈活和強(qiáng)大的特點(diǎn)。要想熟練使用C語(yǔ)言進(jìn)行編程,首先需要了解其基本語(yǔ)法和數(shù)據(jù)類型。本文將介紹C語(yǔ)言的基本語(yǔ)法和數(shù)據(jù)類型,并舉例說(shuō)明。一、基本語(yǔ)法1.1注釋在C語(yǔ)言中,可以使用注釋來(lái)對(duì)代碼進(jìn)行說(shuō)明,以便于理解和維護(hù)。注釋可以分為單行注釋和多行注釋。//這是單行注釋/*這是多行注釋*/1.2關(guān)鍵字C語(yǔ)

java數(shù)據(jù)類型分為哪兩大類 java數(shù)據(jù)類型分為哪兩大類 Jan 26, 2024 pm 03:50 PM

分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。詳細(xì)介紹:1、基本數(shù)據(jù)類型包含整數(shù)類型、浮點(diǎn)類型、字符類型、布爾類型;2、引用數(shù)據(jù)類型包含類、接口、數(shù)組、枚舉、其他引用類型。在Java中,基本數(shù)據(jù)類型是按值傳遞的,而引用數(shù)據(jù)類型是按引用傳遞的?;緮?shù)據(jù)類型直接存儲(chǔ)實(shí)際的值,而引用數(shù)據(jù)類型存儲(chǔ)的是對(duì)象的引用(地址)。

See all articles