日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES6 Symbol 数据类型

發(fā)布時(shí)間:2025/3/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES6 Symbol 数据类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ES6-Symbol 類型


  • ES5 除類數(shù)組對象(類數(shù)組對象名可以為數(shù)字,對象必須有 length 屬性,可以用數(shù)組下標(biāo)的方式訪問對象屬性,但不能通過點(diǎn)的方式訪問)外,對象屬性名都是字符串,這很容易造成屬性名的沖突。而且 JavaScript 是弱類型語言,屬性名沖突不會報(bào)錯(cuò),處于代碼執(zhí)行順序后面的屬性值會覆蓋前面的屬性值(屬性值容易被篡改),這樣對象的屬性就不能保證是我們想要的。

  • ES6 引入了Symbol數(shù)據(jù)類型很好地解決了對象屬性名沖突的問題。

  • Symbol表示 獨(dú)一無二的值 ,它是原始數(shù)據(jù)類型,不能用 new

  • ES6之后JavaScript就有了7種數(shù)據(jù)類型,分別是:Number 、String 、Boolean 、null 、undefined 、Object 、Symbol

  • 基本用法


    Symbol 函數(shù)棧不能用 new 命令,因?yàn)?Symbol 是原始數(shù)據(jù)類型,不是對象。可以接受一個(gè)字符串作為參數(shù),為新創(chuàng)建的 Symbol 提供描述,用來顯示控制臺或者作為字符串的時(shí)候使用,便于區(qū)分。

    let name = Symbol('name'); console.log(name); // Symbol(name); console.log(typeof name); // "symbol"

    特點(diǎn)

  • Symbol 函數(shù)棧不能用 new 命令,因?yàn)?Symbol 是原始數(shù)據(jù)類型,不是對象;

  • Symbol 表示獨(dú)一無二的值,因此帶有相同參數(shù)的兩個(gè) Symbol 值也不相等;

  • // 沒有參數(shù)的情況 let name1 = Symbol(); let name2 = Symbol();name1 === name2 // false// 有參數(shù)的情況 let name1 = Symbol('foo'); let name2 = Symbol('foo');name1 === name2 // false
  • Symbol 不能進(jìn)行隱式類型轉(zhuǎn)換
  • let name = Symbol('foo'); console.log('你好,' + name); // 報(bào)錯(cuò):Cannot convert a Symbol value to a string(無法將symbol值轉(zhuǎn)換為字符串)console.log(`你好,${name}`); // 報(bào)錯(cuò):Cannot convert a Symbol value to a string(無法將symbol值轉(zhuǎn)換為字符串)console.log(name + 1); // 報(bào)錯(cuò):Cannot convert a Symbol value to a number(無法將symbol值轉(zhuǎn)換為數(shù)值)
  • Symbol 值可以顯式轉(zhuǎn)為字符串
  • let name = Symbol('foo'); console.log(String(name)); // "Symbol(foo)" console.log(name.toString); // "Symbol(foo)"
  • Symbol 值不能轉(zhuǎn)化為數(shù)字
  • let name = Symbol('foo'); console.log(Number.name); // 報(bào)錯(cuò):Cannot convert a Symbol value to a number(無法將symbol值轉(zhuǎn)換為數(shù)值)
  • Symbol 值可以轉(zhuǎn)換為布爾值
  • let name = Symbol('foo'); console.log(Boolean(name)); // true console.log(!name); // false

    Symbol 應(yīng)用場景


  • 作為對象屬性名
  • 用 Symbol 聲明的對象名不能用 key.value 的形式獲取對象的屬性值,要用 [ ],原因:
    1. ES5中對象 .(點(diǎn)) 運(yùn)算符獲取的屬性名是字符串, 用 key.value 的形式會將屬性名識別為字符串,新建一個(gè)屬性名給對象,無法和 Symbol 屬性區(qū)別
    2. 方括號中帶雙引號的屬性名表示字符串屬性,不帶雙引號的屬性名表示 Symbol 屬性,一次區(qū)別二者

    let sy = Symbol();// 寫法 1 let syObject = {}; syObject[sy] = 'symbol'; console.log(syObject); // {Symbol(): "symbol"}// 寫法 2 let syObject = {[sy]: "symbol" }; console.log(syObject); // {Symbol(): "symbol"}// 寫法 3 let syObject = {}; Object.defineProperty(syObject, sy, {value: "symbol"}); console.log(syObject); // {Symbol(): "symbol"}// 萬萬不能用點(diǎn) syObject[sy]; // "symbol"; syObject.sy; // 'undefined' // 因?yàn)?syObject.sy === syObject["sy"]
  • Symbol 值作為屬性名時(shí),該屬性是公有屬性不是私有屬性,可以在類的外部訪問。但是不會出現(xiàn)在 for...in、for...of 的循環(huán)中,也不會被 Object.keys() 、Object.getOwnPropertyNames() 返回。如果要讀取一個(gè)對象的 Symbol 屬性,可以通過 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。
  • let sy = Symbol(); let syObject = {}; syObject[sy] = "symbol"; console.log(syObject); // {Symbol(): "symbol"}for (let i in syObject) {console.log(i); // 無輸出 }Object.keys(syObject); // [] Object.getOwnpropertyNames(syObject); // [] Object.getOwnpropertySymbols(syObject); // [Symbol()] Reflect.ownKeys(syObject); // [Symbol()]

    Symbol的方法

  • Symbol.for()
  • 作用:用于將描述相同的 Symbol 變量指向同一個(gè) Symbol 值

    let a1 = Symbol.for('a');let a2 = Symbol.for('a');a1 === a2 // truetypeof a1 // "symbol"typeof a2 // "symbol"let a3 = Symbol('a');a1 === a3 // false
    • Symbol() 和 Symbol.for() 的相同點(diǎn):
    • 它們定義的值類型都為 “Symbol”;
    • Symbol() 和 Symbol.for() 的不同點(diǎn):
    • Symbol() 定義的值每次都是新建,即使描述相同值也不相等;
    • Symbol() 定義的值會先檢查給定的描述是否已經(jīng)存在,如果不存在才會新建一個(gè)值,并把這個(gè)值登記在全局環(huán)境中供搜索,Symbol.for() 定義相同描述的值時(shí)會被搜索到,描述相同則他們就是一個(gè)值。
  • Symbol.keyFor()
  • 作用:用來檢測該字符串參數(shù)作為名稱的 Symbol 值是否已被登記,返回一個(gè)已登記的 Symbol 類型值的 key

    let a1 = Symbol.for('a'); Symbol.keyFor(a1); // "a" let a2 = Symbol('a'); Symbol.keyFor(a2); // undefined// a1已經(jīng)用Symbol.for()登記過,因此返回的key為"a",而a2沒有被登記,因此返回undefined

    Symbol的屬性

  • Symbol.prototype.descirption
  • description用于返回 Symbol 數(shù)據(jù)的描述

    // Symbol() 定義的數(shù)據(jù) let a = Symbol('acc'); console.log(a.description); // "acc" Symbol.keyFor(a); // undefined// Symbol.for() 定義的數(shù)據(jù) let a1 = Symbol.for('acc'); console.log(a1.description); // "acc" Symbol.keyFor(a1); // "acc"// 未指定描述的數(shù)據(jù) let a2 = Symbol.(); console.log(a1.description); // undefined

    description屬性和Symbol.keyFor()方法的區(qū)別是:description 能返回所有 Symbol 數(shù)據(jù)類型的描述,而 Symbol.keyFor() 只能返回 Symbol.for() 在全局注冊過的描述。

    總結(jié)

    以上是生活随笔為你收集整理的ES6 Symbol 数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 手机在线视频一区 | wwxx日本 | 国产综合福利 | 欧美一区二区三区粗大 | 久久久久亚洲av片无码v | 欧美三级小说 | 二区三区偷拍浴室洗澡视频 | 欧美一区二区视频 | 狠狠干天天爱 | 91麻豆精品国产午夜天堂 | 欧美激情一区二区三区四区 | 中文第一页 | 成人精品在线观看视频 | 超碰天堂| 久草国产在线 | 国产精品美女www爽爽爽 | 亚洲午夜久久久久 | 97av在线视频 | av福利网| 性淫bbwbbwbbw| 曰批又黄又爽免费视频 | 午夜网| 在线观看日韩 | 三级做爰在线观看视频 | 色综合天天网 | 动漫精品一区二区三区 | 婷婷久久丁香 | 国产 日韩 欧美 制服丝袜 | 特种兵之深入敌后 | 四虎一区二区三区 | 国产suv精品一区二区6 | 免费成人小视频 | 国产精品第56页 | 黄网站免费在线观看 | 欧美日色 | 99精品视频免费版的特色功能 | 一区二区三区四区视频在线观看 | 美女爱爱视频 | 久久91精品国产91久久小草 | youjizz.com在线观看 | 精品婷婷色一区二区三区蜜桃 | 日本美女全裸 | 国产三级漂亮女教师 | 欧美久久久 | 无码精品视频一区二区三区 | 青草av在线 | av国产片| 成年视频在线观看 | 打开免费观看视频在线 | 国产码视频 | 色哟哟国产 | 国产欧美一区二区三区精品酒店 | 91免费版黄 | 国产成人精品一区二区三区在线 | 阿v视频在线免费观看 | av青青草原 | 交视频在线播放 | 日韩大片免费观看视频播放 | 蜜臀av一区二区三区 | 欧洲成人午夜精品无码区久久 | 日本丰满少妇裸体自慰 | 丁香激情婷婷 | 91精品婷婷国产综合久久竹菊 | 久久综合伊人77777麻豆最新章节 | 亚洲丁香色| 五月婷婷亚洲综合 | 波多野结衣 久久 | 天天干夜夜夜夜 | 亚洲成人自拍网 | 天堂社区av | 一区二区三区在线免费视频 | 与子敌伦刺激对白播放的优点 | 爱色成人网 | 久久久免费电影 | 成人在线免费高清视频 | 国模一区二区三区 | 亚洲人成在线免费观看 | 日韩一区二区三区不卡视频 | 免费观看成人鲁鲁鲁鲁鲁视频 | 欧美a级成人淫片免费看 | 亚洲国产视频网站 | 在线播放av网站 | 91成人在线看 | 国产乱人伦精品一区二区 | 蜜桃一二三区 | 天天视频亚洲 | 黄色av网站网址 | 久久亚洲影视 | 欧美少妇xxxxx | 成人在线观看网址 | 中文字幕免费在线看线人动作大片 | 91视频中文字幕 | 五月天中文字幕在线 | 欧美性生话 | 激情小说亚洲图片 | 国产特级黄色片 | 成人娱乐网 | 最新毛片基地 | 伊人宗合|