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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES6-10 super、4种遍历方式、原型、symbol遍历

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES6-10 super、4种遍历方式、原型、symbol遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于現代 JavaScript 引擎優化屬性訪問所帶來的特性的關系,更改對象的 [[Prototype]]即__proto__在各個瀏覽器和 JavaScript 引擎上都是一個很慢的操作。

一 Object原型方法

1 Object.setPrototypeOf(obj, proto)

  • 用該方法而不是直接修改__proto__
  • 返回值是設置好原型的obj,即第一個參數
  • 若第一個參數不是對象,則該操作沒有效果,將第一個參數構造函數的原型作為obj的原型
const n = new Number(1) console.log(n) console.log(Object.getPrototypeOf(n)) const obj = Object.setPrototypeOf(1, { a: 100 }) console.log(obj) console.log(Object.getPrototypeOf(obj)) // 查看原型是否設置上

  • 若第一個參數是undefined/null(沒有包裝類),則報錯

2 Object.getPrototypeOf()

  • 當參數是原始值,則返回其包裝類構造函數的原型

3 Object.keys()

  • 返回可枚舉屬性,不含繼承屬性
  • for in可以拿到繼承的屬性

4 Object.values()

  • 返回可枚舉屬性值

5 Object.entries()

const obj = { a: 1 } Object.defineProperties(obj, {b: {value: 2,enumerable: true},c: {value: 3} }) const p = { d: 4 } Object.setPrototypeOf(obj, p) console.log(obj) console.log('keys', Object.keys(obj)) console.log('values', Object.values(obj)) console.log('entries', Object.entries(obj))


super

  • 指向對象的原型對象
  • 使用限制:必須是對象的方法,且是簡寫時才能訪問到super
let proto = {y: 20,z: 40 } let obj = {x: 10,foo() {console.log(super.y)} } Object.setPrototypeOf(obj, proto) obj.foo() // 20

Symbol

  • 解決對象屬性重名的問題
  • 是原始值類型
  • Symbol是構造函數,new會報錯
  • 生成獨一無二的值
  • typeof返回symbol
  • 掛不上屬性

包裝類是這么掛屬性么

let s1 = Symbol() s1.a = 1; console.log(s1.a) // undefined console.log(Symbol()) // Symbol() console.log(Symbol(undefined)) // Symbol() console.log(Symbol(null)) // Symbol(null) console.log(Symbol(1)) // Symbol(1) console.log(Symbol(true)) // Symbol(true) console.log(Symbol('1')) // Symbol(1) console.log(Symbol({})) // Symbol([object Object]) console.log(Symbol(function () { })) // Symbol(function(){}) console.log(Symbol([])) // Symbol() console.log(Symbol([1, 2, 3])) // Symbol(1,2,3) console.log(String(Symbol('字符串'))) // Symbol(字符串) console.log(Boolean(Symbol(1))) // true console.log(Boolean(Symbol(null))) // true 注意為false的就6種 const s1 = Symbol() console.log(Object.getPrototypeOf(s1)) // Symbol.prototype // Cannot convert a Symbol value to a number console.log(Number(Symbol(1))) // 報錯 console.log(Symbol() + 1) // 報錯

很明顯,生成Symbol時,在括號內使用了對應變量的toString方法,數組、對象、方法的返回值各不相同

  • Symbol有自己的toString方法
  • 顯式轉換只有Number不能轉,Boolean、String可以
  • 隱式轉換僅限Boolean

Symbol作為對象屬性

  • obj[s1] = xx
  • const obj = { [s1]: xxx }
  • Object.defineProperty(obj, s1, { value: xxx })

Symbol方法

  • Symbol.for(‘foo’)獲取到同樣的Symbol值
  • 傳相同的key
  • Symbol.keyFor(s1)獲取到用Symbol.for指定的key值
const s1 = Symbol.for('foo') const s2 = Symbol.for('foo') console.log(s1 === s2) // true console.log(Symbol.keyFor(s1)) // foo const s22 = Symbol() const s3 = Symbol(null) const s4 = Symbol(1) console.log(Symbol.keyFor(s22)) // undefined 他們都沒有用Symbol.for指定key console.log(Symbol.keyFor(s3)) // undefined console.log(Symbol.keyFor(s4)) // undefined

Symbol屬性遍歷

  • for in不能遍歷到Symbol類型的屬性
  • for of不能遍歷到Symbol類型的屬性
  • 特有的api Object.getOwnPropertySymbols(obj)僅遍歷obj的Symbol類型的屬性

for…in語句以任意順序遍歷一個對象的除Symbol以外的可枚舉屬性(包括繼承)。
Object.keys() 方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和正常循環遍歷該對象時返回的順序一致 。
在給定對象自身上找到的所有 Symbol 屬性的數組。(和枚舉無關)

const obj = { c: 1, d: 2 } let a = Symbol('a') let b = Symbol('b') let _a = Symbol('_a') let _b = Symbol('_b') obj[a] = 'hello' obj[b] = 'world' Object.defineProperties(obj, {e: {value: 5,enumerable: true,},f: {value: 6,enumerable: false,},[_a]: {value: -1,enumerable: true,},[_b]: {value: -2,enumerable: false,}, }) let h = Symbol('h') let i = Symbol('i') let j = Symbol('j')const obj1 = {g: 7,[h]: 8 } Object.defineProperties(obj1, {[i]: {value: 9,enumerable: true,},[j]: {value: 10,},k: {value: 11} }) Object.setPrototypeOf(obj, obj1) console.log(obj) for (let i in obj) {console.log(i) // c d e g } console.log(Object.keys(obj)) // ["c", "d", "e"] console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(a), Symbol(b), Symbol(_a), Symbol(_b)] console.log(Object.assign(obj)) // 只拷貝自身的可枚舉屬

總結

以上是生活随笔為你收集整理的ES6-10 super、4种遍历方式、原型、symbol遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久不射视频 | 中文字幕少妇 | 久久一级黄色片 | 日韩第九页 | 人妻与黑人一区二区三区 | 国产精品剧情一区 | a√天堂在线 | 男女一区二区三区 | 日本一区成人 | 亚洲国产精品免费 | 日韩一区在线观看视频 | 欧美顶级少妇做爰 | 中文字幕 欧美日韩 | 国产日韩欧美另类 | 在线观看国产麻豆 | 亚洲一区二区在线 | 在线观看精品 | 国产又粗又长又大视频 | 手机在线免费观看av | 色呦呦在线看 | 精品伦精品一区二区三区视频密桃 | 日本乱码一区 | 99视频免费看 | 欧美bbbbbbbbbbbb1 麻豆精品av | 秘密爱大尺度做爰呻吟 | 国产无遮挡一区二区三区毛片日本 | 污视频网站入口 | 亚洲国产欧美一区二区三区深喉 | 国产精选视频 | 久久精品香蕉视频 | 91爱啪啪 | 久久最新视频 | 欧美亚洲韩国 | 国产无遮挡又黄又爽免费视频 | 男人av资源网| 天天干夜夜草 | www狠狠干 | 欧美日韩1 | 粉嫩av一区二区三区免费观看 | 精品午夜一区二区三区在线观看 | 九九九九色 | 视频在线a | 深爱激情综合 | 亚洲天堂网视频 | 欧美一级一级一级 | 欧美人与动物xxxxx | 久久最新精品 | 一进一出好爽视频 | 人妻少妇偷人精品久久久任期 | 黑人操亚洲人 | 青青草视频网站 | 在线免费观看不卡av | 精品国偷自产一区二区三区 | 欧美日韩综合 | 性感美女在线观看 | 黑人玩弄人妻一区二区三区 | 爱操影院 | 蜜臀国产AV天堂久久无码蜜臀 | 波多野结衣视频免费 | 久啪视频 | 欲求不满的岳中文字幕 | 国产污污| 久久99日韩| 天天看片天天射 | 一级黄色淫片 | 国产视频1区| 国产精品偷拍 | 亚洲图片偷拍区 | 日韩免费三级 | 久久55| 丰满熟女一区二区三区 | 在线观看免费av片 | 极品国产白皙 | 美女视频黄色免费 | 午夜精品少妇 | 久草免费在线观看视频 | 亚洲最大福利网 | 日韩精品一区二区av | 丝袜美腿亚洲一区二区图片 | 人人爽爽爽| 久草手机在线视频 | 偷拍女澡堂一区二区三区 | 免费中文字幕视频 | 在线看片你懂 | 亚洲av综合一区二区 | 欧美成人a∨高清免费观看 国产精品999视频 | 蜜桃av噜噜 | 亚洲视频在线观看一区二区 | 黄色成人毛片 | 伊人草草| 久久婷婷国产 | 成人久久18免费网站图片 | 免费高清视频一区二区三区 | 成人av免费播放 | 日韩国产在线一区 | 国产精品视频一二三 | 九九九在线视频 | а√天堂8资源中文在线 | 美女大bxxxxn内射 |