Javascript中Object常用方法學習
1、Object.assign 函式(物件)(JavaScript)
將來自一個或多個源物件中的值複製到一個目標物件。語法: Object.assign(target, ...sources );
此函式返回目標物件。 僅可列舉自有 屬性從源物件複製到目標物件。可使用此函式合併或克隆物件。 null 或 undefined 源被視為空物件一樣對待,不會對目標物件產生任何影響。
let obj1 = { name: 'xiaoming' } let obj2 = { age: '23' } let obj3 = Object.assign(obj1,obj2) let obj4 = Object.assign({},obj1)//克隆了obj1物件 console.log(obj3)//{name: "xiaoming", age: "23"} console.log(obj4)//{name: "xiaoming", age: "23"} console.log(obj1)//{name: "xiaoming", age: "23"}。obj1發生改變是因為obj2賦給了obj1 console.log(obj2)//{age: "23"}
方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源物件某個屬性的值是物件,那麼目標物件拷貝得到的是這個物件的引用。同名屬性會替換。
let obj5 = { number: 6, name: 'zengfp', fn: { sum: 10 } } let obj6 = Object.assign(obj1,obj5) console.log(obj6)//{name: "zengfp", age: "23", number: 6, fn: {…}} console.log(obj1)//{name: "zengfp", age: "23", number: 6, fn: {…}} 對同名屬性name進行了替換
2、Object.create 函式 (JavaScript)。建立一個具有指定原型且可選擇性地包含指定屬性的物件。語法: Object.create(prototype, descriptors)
若要停止原型鏈,可以使用採用了 null prototype 引數的函式。 所建立的物件將沒有原型。
let newObj = Object.create(null, { size: { value: "large", enumerable: true }, shape: { value: "round", enumerable: true } }); console.log(newObj)//{size: "large", shape: "round"} console.log(Object.getPrototypeOf(newObj))//null
建立一個具有與 person 物件相同的內部原型的物件
let person = { name: 'zengfp', age: 25 } let obj = Object.create(person,{ z: { value: 8 } }) console.log(obj)//{z:8} console.log(Object.getPrototypeOf(obj))//{name: "zengfp", age: 25}
3、Object.defineProperties 函式 (JavaScript)。 將一個或多個屬性新增到物件,並/或修改現有屬性的特性。語法: object.defineProperties(object, descriptors)
let obj = {} Object.defineProperties(obj,{ newDataProperty: { value: 101, writable: true, enumerable: true, configurable: true }, newAccessorProperty: { set: function (x) { this.newaccpropvalue = x; }, get: function () { return this.newaccpropvalue; }, enumerable: true, configurable: true } }) console.log(obj.newDataProperty)//101 obj.newAccessorProperty = 20 console.log(obj.newAccessorProperty)//20
4、Object.defineProperty 函式 (JavaScript)。將屬性新增到物件,或修改現有屬性的特性。語法: Object.defineProperty(object, propertyname, descriptor)
可使用 Object.defineProperty 函式來執行以下操作:
-
向物件新增新屬性。 當物件不具有指定的屬性名稱時,發生此操作。
-
修改現有屬性的特性。 當物件已具有指定的屬性名稱時,發成此操作。
描述符物件中會提供屬性定義,用於描述資料屬性或訪問器屬性的特性。 描述符物件是 Object.defineProperty 函式的引數
let obj = {} Object.defineProperty(obj,'newDataProperty',{ value: 101, writable: true, enumerable: true, configurable: true }) obj.newDataProperty = 88 console.log(obj.newDataProperty)//88
5、Object.is 函式 (JavaScript)。返回一個值,該值指示兩個值是否相同。語法: Object.is(value1, value2)
與 = = 運算子不同,Object.is 在測試值時不會強制任何型別。 Object.is 應用的比較類似於 === 運算子所應用的比較,區別在於 Object.is 將 Number.isNaN 視作與 NaN 相同的值。它還將 + 0 和-0 視作不同值。
let obj = { x: 5, y: 6 } let obj1 = { x: 5, y: 8 } let obj2 = { x:'5', y: 8 } console.log(Object.is(obj.x,obj1.x))//true console.log(Object.is(obj2.x,obj1.x))//false
6、Object.keys 函式 (JavaScript)。返回物件的可列舉屬性和方法的名稱。語法: Object.keys(object) 。返回一個數組,其中包含物件的可列舉屬性和方法的名稱。
let obj = { x: 5, y: 6, name: 'zengf' } let keys = Object.keys(obj) console.log(keys)// ["x", "y", "name"]
7、Object.entries()。該方法返回一個給定物件自身可列舉屬性的鍵值對陣列,其排列與使用 for .... in 迴圈遍歷該物件時返回的順序一致(區別在於 for-in 迴圈也列舉原型鏈中的屬性)
const obj = { foo: 'bar', baz: 42 }; console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ] // array like object const obj = { 0: 'a', 1: 'b', 2: 'c' }; console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ] // array like object with random key ordering const anObj = { 100: 'a', 2: 'b', 7: 'c' }; console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ] // getFoo is property which isn't enumerable const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } }); myObj.foo = 'bar'; console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ] // non-object argument will be coerced to an object console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ] // iterate through key-value gracefully const obj = { a: 5, b: 7, c: 9 }; for (const [key, value] of Object.entries(obj)) { console.log(`${key} ${value}`); // "a 5", "b 7", "c 9" } // Or, using array extras Object.entries(obj).forEach(([key, value]) => { console.log(`${key} ${value}`); // "a 5", "b 7", "c 9" });
參考網址:https://msdn.microsoft.com/zh-cn/library/k6xhc6yc(v=vs.94).aspx