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

溫馨提示×

溫馨提示×

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

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

JavaScript中Object的方法示例

發布時間:2020-12-03 13:16:17 來源:億速云 閱讀:127 作者:小新 欄目:web開發

這篇文章主要介紹了JavaScript中Object的方法示例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

1、hasOwnProperty

obj.hasOwnProperty(prop)

參數

prop: 要檢測的屬性字符串名稱或者Symbol

返回值

用來判斷一個對象是否含有指定的屬性的Boolean

所有繼承了Object的對象,都會繼承到hasOwnProperty()方法。這個方法用來檢測一個對象是否含有特定的自身屬性。和in運算符不同,該方法會忽略那些從原型鏈上繼承到的屬性

Object.prototype.a = 'aaa';
var obj = {
  b: 'bbb'
}
console.log(obj.hasOwnProperty(a)); // false
for(var item in obj) {
  console.log(item); // b  a。此結果也找到了從原型鏈上繼承過來的屬性
}

如果hasOwnProperty作為屬性名

var foo = {
  hasOwnProperty: function() {
    return false
  },
  bar: 'bar'
}

foo.hasOwnProperty('bar'); // false
// 如果這種情況下,想調用原型鏈上的方法
({}).hasOwnProperty.call(foo, 'bar'); // 即foo對象調用了{}對象的方法。
// 等同于
Object.prototype.hasOwnProperty.call(foo, 'bar')
擴展:遍歷一個對象的所有屬性

for ... in 只會循環可枚舉的屬性,所以不應該基于這個循環不可枚舉的屬性。

2.getOwnPropertyNames

Object.getOwnPropertyNames(obj)
參數

obj 一個對象,其自身的可枚舉和不可枚舉屬性的名稱被返回。

返回值

在給定對象上找到的自身屬性對應的字符串數組。

Object.getOwnPropertyNames()返回一個數組,數組中包含obj中可枚舉和不可枚舉的屬性。

3.Object.keys()

Object.keys(obj)
參數

要返回其枚舉自身屬性的對象

返回值

一個表示給定對象的所有可枚舉屬性的字符串數組

描述

Object.keys()返回一個所有元素為字符串的數組,其元素來自于從給定的object上面可直接枚舉的屬性。這些屬性的順序與手動遍歷該屬性(for...in...)時一致。

var obj = {a:'a',b:'b',c:'c'};
console.log(Object.keys(obj));// ['a', 'b', 'c']

4.Object.values()

Object.keys()返回key值,Object.values()返回value值,規則與Object.keys()相同。

5.Object.assign()

Object.assign()用于將所有可枚舉的值從一個對象復制到目標對象。它將返回目標對象。

Object.assign(target, ...sources);
描述

如果目標對象中的屬性與源對象中具有相同的屬性。則目標對象中的屬性將被覆蓋。String類型和Symbol類型的屬性都會被拷貝。  
在出現錯誤的情況下,例如,如果屬性不可寫,會引發TypeError,如果在引發錯誤之前添加了任何屬性,則可以更改target對象。

const a = {a: 'a', b: 'b'};
var b = Object.assign({}, a);
console.log(b); //{a: 'a', b: 'b'}

深拷貝,Object.assign()只能拷貝對象第一層的屬性。如果源對象的屬性值是一個指向對象的引用,它也只拷貝那個引用值。

  let obj1 = { a: 0 , b: { c: 0}};
  let obj2 = Object.assign({}, obj1);
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj1.a = 1;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj2.a = 2;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
  
  obj2.b.c = 3;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
  
  // Deep Clone
  obj1 = { a: 0 , b: { c: 0}};
  let obj3 = JSON.parse(JSON.stringify(obj1));
  obj1.a = 4;
  obj1.b.c = 4;
  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}

合并對象

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目標對象自身也會改變。

合并具有相同屬性的對象,屬性被后續參數中具有相同屬性的其他對象覆蓋。

var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };

var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

拷貝 symbol 類型的屬性

var o1 = { a: 1 };
var o2 = { [Symbol('foo')]: 2 };

var obj = Object.assign({}, o1, o2);
console.log(obj); // { a : 1, [Symbol("foo")]: 2 } (cf. bug 1207182 on Firefox)
Object.getOwnPropertySymbols(obj); // [Symbol(foo)]

繼承屬性和不可枚舉屬性是不能拷貝的

var obj = Object.create({foo: 1}, { // foo 是個繼承屬性。
    bar: {
        value: 2  // bar 是個不可枚舉屬性。
    },
    baz: {
        value: 3,
        enumerable: true  // baz 是個自身可枚舉屬性。
    }
});

var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }

原始類型會被包裝為對象

var v1 = "abc";
var v2 = true;
var v3 = 10;
var v4 = Symbol("foo")

var obj = Object.assign({}, v1, null, v2, undefined, v3, v4); 
// 原始類型會被包裝,null 和 undefined 會被忽略。
// 注意,只有字符串的包裝對象才可能有自身可枚舉屬性。
console.log(obj); // { "0": "a", "1": "b", "2": "c" }

異常會打斷后續拷貝任務

var target = Object.defineProperty({}, "foo", {
    value: 1,
    writable: false
}); // target 的 foo 屬性是個只讀屬性。

Object.assign(target, {bar: 2}, {foo2: 3, foo: 3, foo3: 3}, {baz: 4});
// TypeError: "foo" is read-only
// 注意這個異常是在拷貝第二個源對象的第二個屬性時發生的。

console.log(target.bar);  // 2,說明第一個源對象拷貝成功了。
console.log(target.foo2); // 3,說明第二個源對象的第一個屬性也拷貝成功了。
console.log(target.foo);  // 1,只讀屬性不能被覆蓋,所以第二個源對象的第二個屬性拷貝失敗了。
console.log(target.foo3); // undefined,異常之后 assign 方法就退出了,第三個屬性是不會被拷貝到的。
console.log(target.baz);  // undefined,第三個源對象更是不會被拷貝到的。

拷貝訪問器

var obj = {
  foo: 1,
  get bar() {
    return 2;
  }
};

var copy = Object.assign({}, obj); 
// { foo: 1, bar: 2 }
// copy.bar的值來自obj.bar的getter函數的返回值 
console.log(copy); 

// 下面這個函數會拷貝所有自有屬性的屬性描述符
function completeAssign(target, ...sources) {
  sources.forEach(source => {
    let descriptors = Object.keys(source).reduce((descriptors, key) => {
      descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
      return descriptors;
    }, {});

    // Object.assign 默認也會拷貝可枚舉的Symbols
    Object.getOwnPropertySymbols(source).forEach(sym => {
      let descriptor = Object.getOwnPropertyDescriptor(source, sym);
      if (descriptor.enumerable) {
        descriptors[sym] = descriptor;
      }
    });
    Object.defineProperties(target, descriptors);
  });
  return target;
}

var copy = completeAssign({}, obj);
console.log(copy);
// { foo:1, get bar() { return 2 } }

感謝你能夠認真閱讀完這篇文章,希望小編分享JavaScript中Object的方法示例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

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

AI

新昌县| 平昌县| 彭州市| 洛南县| 安塞县| 光泽县| 娱乐| 栖霞市| 高台县| 象州县| 霸州市| 信阳市| 正安县| 乡城县| 永济市| 武乡县| 浮梁县| 分宜县| 焦作市| 太仓市| 繁昌县| 隆化县| 积石山| 台安县| 苍南县| 浮山县| 拉孜县| 龙州县| 清徐县| 贡嘎县| 平湖市| 罗平县| 淄博市| 蒲城县| 上饶市| 隆化县| 恩平市| 南木林县| 文登市| 石泉县| 行唐县|