<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【每日一題】Reflect.ownKeys 與 Object.keys 的區(qū)別

          共 1869字,需瀏覽 4分鐘

           ·

          2021-08-28 13:02

          人生苦短,總需要一點(diǎn)儀式感。比如學(xué)前端~

          用法上

          兩個(gè)函數(shù)都是接受一個(gè)對(duì)象參數(shù),并都是以數(shù)組形式返回對(duì)象屬性的集合

          而且參數(shù)都必須是對(duì)象,如果是其他亂麻七糟的類(lèi)型,會(huì)報(bào)錯(cuò)

          Reflect.ownKeys(targetObj)

          Object.keys(targetObj)
          使用示例

          不同之處

          關(guān)于對(duì)象屬性是否可枚舉

          Reflect.ownKeys()可以得到對(duì)象自己的所有屬性,包括不可枚舉屬性
          Object.keys()只能得到對(duì)象的普通可枚舉屬性,拿不到不可枚舉屬性。

          關(guān)于Symbol屬性

          Reflect.ownKeys()可以拿到對(duì)象的Symbol 的屬性;
          Object.keys()不行

          關(guān)于數(shù)組的length屬性

          因?yàn)?code style="overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">Reflect.ownKeys()可以得到對(duì)象的不可枚舉屬性這個(gè)特點(diǎn),所以當(dāng)目標(biāo)對(duì)象是數(shù)組對(duì)象時(shí),我們可以看到獲取的結(jié)果會(huì)比Object.keys()多一個(gè)length屬性

          事實(shí)證明,數(shù)組的length也確實(shí)是“不可枚舉的”:

          關(guān)于對(duì)象的原型

          倆人這點(diǎn)上誰(shuí)也不比誰(shuí)強(qiáng),都拿不到原型鏈上的屬性。

          不過(guò)還好,這點(diǎn)需求上,可以用for...in來(lái)替代。

          總結(jié)

          分類(lèi)表格

          整理一個(gè)看上去更清晰的表格如下(感謝群友給的靈感)


          方法分類(lèi)普通屬性不可枚舉屬性Symbol屬性原型屬性數(shù)組length
          Reflect.ownKeys()?????
          Object.keys()?????
          for...in?????

          數(shù)組length其實(shí)就是不可枚舉屬性那一列的延伸。

          測(cè)試代碼匯總:

          Object.prototype.pr = "我是原型屬性"// 原型上增加“pr”屬性
          let s = Symbol();
          let obj = {
            [s]: "this is Symbol"// 增加一個(gè)Symbol屬性“[s]”
            a"a"// 一個(gè)普通屬性“a”
          };
          // 再定義一個(gè)不可枚舉的屬性“name”
          Object.defineProperty(obj, "name", {
            value"sunny",
            configurabletrue,
            enumerablefalse// *
            writabletrue,
          });

          // 觀察打印結(jié)果
          console.log("Object.keys"Object.keys(obj)); // 只得到一個(gè)普通屬性:["a"]
          console.log("Reflect.ownKeys(obj)"Reflect.ownKeys(obj)); // 得到普通屬性,以及symbol和不可枚舉屬性:["a", "name", Symbol()]

          // 遺憾的是,二者都拿不到 原型上的屬性“pr”。我們用for in來(lái)獲取
          for(let o in obj){
            console.log(o) // 分別打印:a、pr
          }
          打印結(jié)果
          for in得到原型屬性pr

          看來(lái)for in也不能獲取symbol屬性和不可枚舉屬性???♀?……



          END
          愿你歷盡千帆,歸來(lái)仍是少年。


          讓我們一起攜手同走前端路!


          ● 工作中常見(jiàn)頁(yè)面布局的n種實(shí)現(xiàn)方法

          ● 三欄響應(yīng)式布局(左右固寬中間自適應(yīng))的5種方法

          ● 兩欄自適應(yīng)布局的n種實(shí)現(xiàn)方法匯總

          ● 工作中常見(jiàn)的兩欄布局案例及分析

          ● 垂直居中布局的一百種實(shí)現(xiàn)方式

          ● 常用九宮格布局的幾大方法匯總

          ● 為什么操作DOM會(huì)影響WEB應(yīng)用的性能?

          ● 移動(dòng)端滾動(dòng)穿透的6種解決方案

          ● Vue + TypeScript 踩坑總結(jié)

          瀏覽 161
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看一级一级人妻片 | 日韩毛片免费 | 欧美色图亚洲图片插菊花综合 | A片免费观看网站 | 国产成人一区二区三区A片免费 |