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

目錄
#宣告方式
Symbol.keyFor()
應用場景
作為屬性名稱
屬性遍歷%%PRE_BLOCK_4%%
消除魔術(shù)字串
首頁 web前端 js教程 javascript資料類型學習之淺析Symbol類型

javascript資料類型學習之淺析Symbol類型

Mar 18, 2022 am 11:01 AM
es6 javascript symbol類型 資料類型

這篇文章帶大家了解一下ES6新增的資料類型:Symbol,聊聊Symbol類型的聲明方式和使用方法,希望對大家有幫助!

javascript資料類型學習之淺析Symbol類型

Symbol一種新的原始資料類型,表示獨一無二的。是javascript中第七種資料型態(tài)。另外六種分別是:undefined、null、String、Number、Object

#宣告方式

##Symbol值透過Symbol函數(shù)產(chǎn)生。

物件的屬性名稱可以有兩種類型,一種是原來就有的字串,另一種就是新增的 Symbol 類型。屬性名稱屬於 Symbol 類型的,都是獨一無二的,可以保證不會與其他屬性名稱衝突。 【相關(guān)推薦:javascript學習教學

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

//Symbol函數(shù)能接受字符串作為參數(shù),表示對Symbol實例的描述
let?s1=Symbol('xxx')
let?s2=Symbol('hhh')
console.log(s1)
//Symbol(xxx)
console.log(s2)
//Symbol(hhh)
console.log(s1===s2)
//false復制代碼
Symbol函數(shù)前不能使用new指令,會報錯。這是因為產(chǎn)生的 Symbol 是原始型別的值,不是物件。也就是說,由於 Symbol 值不是對象,所以不能加入屬性。相當於是一種特殊的字串。

Symbol.for()全域定義Symbol

#Symbol.for() 接受一個字串作為參數(shù),然後搜尋有沒有以該參數(shù)作為名稱的Symbol 值。如果有,就回傳這個 Symbol 值,否則就新建一個以該字串為名稱的 Symbol 值,並將其註冊到全域。

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()這兩種寫法,都會產(chǎn)生新的 Symbol。差別是,前者會被登記在全域環(huán)境中供搜索,後者就不會。 Symbol.for()不會每次呼叫就回傳一個新的 Symbol 類型的值,而是會先檢查給定的key是否已經(jīng)存在,不存在才會新建一個值。

Symbol.keyFor()

Symbol.keyFor()方法傳回一個已經(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

應用場景

作為屬性名稱

由於Symbol 值都是不相等的,這表示?

Symbol 值可以作為標識符,用在物件的屬性名,就能保證不會出現(xiàn)同名的屬性。這對於一個物件由多個模組構(gòu)成的情況非常有用,防止某一個鍵被不小心改寫或覆蓋。

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"}
//對象的key值不能重復 如果有重復 后面的value值就會覆蓋前面的


//使用Symbol解決,相當于一個獨一無二的字符串
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)對象的屬性都能獲取到
for(let key of Reflect.ownKeys(user)){
    console.log(key)
    //name 
    //Symbol(imooc) 
}

消除魔術(shù)字串

魔術(shù)字串指的是,在程式碼中多次出現(xiàn)、與程式碼形成

強耦合的某一個具體的字串或數(shù)值。風格良好的程式碼,應該盡量消除魔術(shù)字串,改成一些意義清晰的變數(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),與代碼形成了“強耦合”,不利于后面的修改和維護。

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))

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

【相關(guān)影片教學推薦:

web前端#

以上是javascript資料類型學習之淺析Symbol類型的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
MySQL資料庫中性別欄位應該使用什麼資料類型? MySQL資料庫中性別欄位應該使用什麼資料類型? Mar 14, 2024 pm 01:21 PM

在MySQL資料庫中,性別欄位通??梢允褂肊NUM類型來儲存。 ENUM是一種枚舉類型,它允許我們在一組預先定義的值中選擇一個作為欄位的值。在表示性別這樣一個固定且有限的選項時,ENUM是一個很好的選擇。讓我們來看一個具體的程式碼範例:假設我們有一個名為"users"的表,其中包含了使用者的信息,包括性別?,F(xiàn)在我們要為性別創(chuàng)建一個字段,我們可以這樣設計表結(jié)構(gòu):CRE

MySQL中最適合用於性別欄位的資料類型是什麼? MySQL中最適合用於性別欄位的資料類型是什麼? Mar 15, 2024 am 10:24 AM

在MySQL中,最適合用於性別欄位的資料類型是ENUM枚舉類型。 ENUM枚舉類型是一種允許定義一組可能取值的資料類型,性別欄位適合使用ENUM類型是因為性別通常只有兩個取值,即男性和女性。接下來,我將透過具體的程式碼範例來展示如何在MySQL中建立一個性別欄位並使用ENUM枚舉類型儲存性別資訊。以下是操作步驟:首先,在MySQL中建立一個名為users的表格,包括

Python 語法的心智圖:深入理解程式碼結(jié)構(gòu) Python 語法的心智圖:深入理解程式碼結(jié)構(gòu) Feb 21, 2024 am 09:00 AM

python憑藉其簡單易讀的語法,廣泛應用於廣泛的領域。掌握Python語法的基礎架構(gòu)至關(guān)重要,既可以提高程式效率,又能深入理解程式碼的運作方式。為此,本文提供了一個全面的心智圖,詳細闡述了Python語法的各個面向。變數(shù)和資料類型變數(shù)是Python中用於儲存資料的容器。心智圖展示了常見的Python資料類型,包括整數(shù)、浮點數(shù)、字串、布林值和列表。每個資料類型都有其自身的特性和操作方法。運算符運算符用於對資料類型執(zhí)行各種操作。心智圖涵蓋了Python中的不同運算子類型,例如算術(shù)運算子、比

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

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

MySQL中性別欄位最佳資料類型選擇是什麼? MySQL中性別欄位最佳資料類型選擇是什麼? Mar 14, 2024 pm 01:24 PM

在設計資料庫表時,選擇合適的資料類型對於效能最佳化和資料儲存效率非常重要。在MySQL資料庫中,儲存性別欄位的資料類型真是沒有所謂的最佳選擇,因為性別欄位一般只有兩個取值:男或女。但是為了效率和節(jié)省空間,我們可以選擇合適的資料類型來儲存性別欄位。在MySQL中,儲存性別欄位最常用的資料類型是枚舉類型。枚舉類型是一種能夠把欄位的值限定在一個有限的集合內(nèi)的資料型別

揭秘主流程式語言中的基本資料型別分類 揭秘主流程式語言中的基本資料型別分類 Feb 18, 2024 pm 10:34 PM

標題:基本資料類型大揭密:了解主流程式語言中的分類正文:在各種程式語言中,資料類型是非常重要的概念,它定義了可以在程式中使用的不同類型的資料。對於程式設計師來說,了解主流程式語言中的基本資料類型是建立堅實程式基礎的第一步。目前,大多數(shù)主流程式語言都支援一些基本的資料類型,它們在語言之間可能有所差異,但主要概念是相似的。這些基本資料類型通常被分為幾個類別,包括整數(shù)

C語言的基本語法和資料類型介紹 C語言的基本語法和資料類型介紹 Mar 18, 2024 pm 04:03 PM

C語言是一種廣泛使用的電腦程式語言,具有高效、靈活和強大的特點。要熟練使用C語言進行編程,首先需要了解其基本語法和資料類型。本文將介紹C語言的基本語法和資料類型,並舉例說明。一、基本語法1.1註解在C語言中,可以使用註解來對程式碼進行說明,以便於理解和維護。註解可以分為單行註解和多行註解。 //這是單行註解/*這是多行註解*/1.2關(guān)鍵字C語

java資料類型分為哪兩大類 java資料類型分為哪兩大類 Jan 26, 2024 pm 03:50 PM

分為基本資料型別和引用資料型態(tài)。詳細介紹:1、基本資料型別包含整數(shù)型別、浮點數(shù)型別、字元型別、布林型別;2、引用資料型別包含類別、介面、陣列、枚舉、其他參考型別。在Java中,基本資料類型是按值傳遞的,而引用資料類型是按引用傳遞的?;举Y料型別直接儲存實際的值,而引用資料型別儲存的是物件的參考(位址)。

See all articles