亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6新增對象如何使用

發布時間:2022-05-31 09:16:58 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“es6新增對象如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“es6新增對象如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、屬性的簡寫

    ES6中,當對象鍵名與對應值名相等的時候,可以進行簡寫

    const baz = {foo:foo}
    
    // 等同于
    const baz = {foo}

    方法也能夠進行簡寫

    const o = {
      method() {
        return "Hello!";
      }
    };
    
    // 等同于
    
    const o = {
      method: function() {
        return "Hello!";
      }
    }

    在函數內作為返回值,也會變得方便很多

    function getPoint() {
      const x = 1;
      const y = 10;
      return {x, y};
    }
    
    getPoint()
    // {x:1, y:10}

    注意:簡寫的對象方法不能用作構造函數,否則會報錯

    const obj = {
      f() {
        this.foo = 'bar';
      }
    };
    
    new obj.f() // 報錯

    二、屬性名表達式

    ES6 允許字面量定義對象時,將表達式放在括號內

    let lastWord = 'last word';
    
    const a = {
      'first word': 'hello',
      [lastWord]: 'world'
    };
    
    a['first word'] // "hello"
    a[lastWord] // "world"
    a['last word'] // "world"

    表達式還可以用于定義方法名

    let obj = {
      ['h' + 'ello']() {
        return 'hi';
      }
    };
    
    obj.hello() // hi

    注意,屬性名表達式與簡潔表示法,不能同時使用,會報錯

    // 報錯
    const foo = 'bar';
    const bar = 'abc';
    const baz = { [foo] };
    
    // 正確
    const foo = 'bar';
    const baz = { [foo]: 'abc'};

    注意,屬性名表達式如果是一個對象,默認情況下會自動將對象轉為字符串[object Object]

    const keyA = {a: 1};
    const keyB = {b: 2};
    
    const myObject = {
      [keyA]: 'valueA',
      [keyB]: 'valueB'
    };
    
    myObject // Object {[object Object]: "valueB"

    三、super關鍵字

    this關鍵字總是指向函數所在的當前對象,ES6 又新增了另一個類似的關鍵字super,指向當前對象的原型對象

    const proto = {
      foo: 'hello'
    };
    
    const obj = {
      foo: 'world',
      find() {
        return super.foo;
      }
    };
    
    Object.setPrototypeOf(obj, proto); // 為obj設置原型對象
    obj.find() // "hello"

    四、擴展運算符的應用

    在解構賦值中,未被讀取的可遍歷的屬性,分配到指定的對象上面

    let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
    x // 1
    y // 2
    z // { a: 3, b: 4 }

    注意:解構賦值必須是最后一個參數,否則會報錯

    解構賦值是淺拷貝

    let obj = { a: { b: 1 } };
    let { ...x } = obj;
    obj.a.b = 2; // 修改obj里面a屬性中鍵值
    x.a.b // 2,影響到了結構出來x的值

    對象的擴展運算符等同于使用Object.assign()方法

    五、屬性的遍歷

    ES6 一共有 5 種方法可以遍歷對象的屬性。

    • for...in:循環遍歷對象自身的和繼承的可枚舉屬性(不含 Symbol 屬性)

    • Object.keys(obj):返回一個數組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含 Symbol 屬性)的鍵名

    • Object.getOwnPropertyNames(obj):回一個數組,包含對象自身的所有屬性(不含 Symbol 屬性,但是包括不可枚舉屬性)的鍵名

    • Object.getOwnPropertySymbols(obj):返回一個數組,包含對象自身的所有 Symbol 屬性的鍵名

    • Reflect.ownKeys(obj):返回一個數組,包含對象自身的(不含繼承的)所有鍵名,不管鍵名是 Symbol 或字符串,也不管是否可枚舉

    上述遍歷,都遵守同樣的屬性遍歷的次序規則:

    • 首先遍歷所有數值鍵,按照數值升序排列

    • 其次遍歷所有字符串鍵,按照加入時間升序排列

    • 最后遍歷所有 Symbol 鍵,按照加入時間升序排

    Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
    // ['2', '10', 'b', 'a', Symbol()]

    六、對象新增的方法

    關于對象新增的方法,分別有以下:

    • Object.is()

    • Object.assign()

    • Object.getOwnPropertyDescriptors()

    • Object.setPrototypeOf(),Object.getPrototypeOf()

    • Object.keys(),Object.values(),Object.entries()

    • Object.fromEntries()

    Object.is()

    嚴格判斷兩個值是否相等,與嚴格比較運算符(===)的行為基本一致,不同之處只有兩個:一是+0不等于-0,二是NaN等于自身

    +0 === -0 //true
    NaN === NaN // false
    
    Object.is(+0, -0) // false
    Object.is(NaN, NaN) // true

    Object.assign()

    Object.assign()方法用于對象的合并,將源對象source的所有可枚舉屬性,復制到目標對象target

    Object.assign()方法的第一個參數是目標對象,后面的參數都是源對象

    const target = { a: 1, b: 1 };
    
    const source1 = { b: 2, c: 2 };
    const source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    target // {a:1, b:2, c:3}

    注意:Object.assign()方法是淺拷貝,遇到同名屬性會進行替換

    Object.getOwnPropertyDescriptors()

    返回指定對象所有自身屬性(非繼承屬性)的描述對象

    const obj = {
      foo: 123,
      get bar() { return 'abc' }
    };
    
    Object.getOwnPropertyDescriptors(obj)
    // { foo:
    //    { value: 123,
    //      writable: true,
    //      enumerable: true,
    //      configurable: true },
    //   bar:
    //    { get: [Function: get bar],
    //      set: undefined,
    //      enumerable: true,
    //      configurable: true } }

    Object.setPrototypeOf()

    Object.setPrototypeOf方法用來設置一個對象的原型對象

    Object.setPrototypeOf(object, prototype)
    
    // 用法
    const o = Object.setPrototypeOf({}, null);

    Object.getPrototypeOf()

    用于讀取一個對象的原型對象

    Object.getPrototypeOf(obj);

    Object.keys()

    返回自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵名的數組

    var obj = { foo: 'bar', baz: 42 };
    Object.keys(obj)
    // ["foo", "baz"]

    Object.values()

    返回自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵對應值的數組

    const obj = { foo: 'bar', baz: 42 };
    Object.values(obj)
    // ["bar", 42]

    Object.entries()

    返回一個對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值對的數組

    const obj = { foo: 'bar', baz: 42 };
    Object.entries(obj)
    // [ ["foo", "bar"], ["baz", 42] ]

    Object.fromEntries()

    用于將一個鍵值對數組轉為對象

    Object.fromEntries([
      ['foo', 'bar'],
      ['baz', 42]
    ])
    // { foo: "bar", baz: 42 }

    讀到這里,這篇“es6新增對象如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    es6
    AI

    息烽县| 石首市| 潮安县| 华亭县| 鄂托克旗| 马边| 阳江市| 潞城市| 佛坪县| 泉州市| 西吉县| 禹州市| 宽城| 广水市| 五峰| 延津县| 昭通市| 五常市| 赫章县| 疏附县| 漳平市| 龙泉市| 湖口县| 上犹县| 富锦市| 榆社县| 贵德县| 灌阳县| 富裕县| 临夏县| 新泰市| 宜春市| 疏附县| 宝丰县| 盘山县| 边坝县| 常熟市| 玉树县| 湖北省| 肃南| 新巴尔虎左旗|