obj.hasownproperty(prop)引數
prop: 要檢測的屬性字串名稱或者symbol
返回值用來判斷乙個物件是否含有指定的屬性的boolean
所有繼承了object的物件,都會繼承到hasownproperty()方法。這個方法用來檢測乙個物件是否含有特定的自身屬性。和in運算子不同,該方法會忽略那些從原型鏈上繼承到的屬性
object.prototype.a = 'aaa';
var obj =
console.log(obj.hasownproperty(a)); // false
for(var item in obj)
如果hasownproperty作為屬性名
var foo = ,
bar: 'bar'
}foo.hasownproperty('bar'); // false
// 如果這種情況下,想呼叫原型鏈上的方法
({}).hasownproperty.call(foo, 'bar'); // 即foo物件呼叫了{}物件的方法。
// 等同於
object.prototype.hasownproperty.call(foo, 'bar')
擴充套件:遍歷乙個物件的所有屬性
for ... in 只會迴圈可列舉的屬性,所以不應該基於這個迴圈不可列舉的屬性。
object.getownpropertynames(obj)引數
obj 乙個物件,其自身的可列舉和不可列舉屬性的名稱被返回。
返回值在給定物件上找到的自身屬性對應的字串陣列。
object.getownpropertynames()返回乙個陣列,陣列中包含obj中可列舉和不可列舉的屬性。
object.keys(obj)引數
要返回其列舉自身屬性的物件
返回值乙個表示給定物件的所有可列舉屬性的字串陣列
描述object.keys()返回乙個所有元素為字串的陣列,其元素來自於從給定的object上面可直接列舉的屬性。這些屬性的順序與手動遍歷該屬性(for...in...)時一致。
var obj = ;
console.log(object.keys(obj));// ['a', 'b', 'c']
object.keys()返回key值,object.values()返回value值,規則與object.keys()相同。
object.assign()用於將所有可列舉的值從乙個物件複製到目標物件。它將返回目標物件。
object.assign(target, ...sources);描述
如果目標物件中的屬性與源物件中具有相同的屬性。則目標物件中的屬性將被覆蓋。string型別和symbol型別的屬性都會被拷貝。
在出現錯誤的情況下,例如,如果屬性不可寫,會引發typeerror,如果在引發錯誤之前新增了任何屬性,則可以更改target物件。
const a = ;
var b = object.assign({}, a);
console.log(b); //
深拷貝,object.assign()只能拷貝物件第一層的屬性。如果源物件的屬性值是乙個指向物件的引用,它也只拷貝那個引用值。
let obj1 = };
let obj2 = object.assign({}, obj1);
console.log(json.stringify(obj2)); // }
obj1.a = 1;
console.log(json.stringify(obj1)); // }
console.log(json.stringify(obj2)); // }
obj2.a = 2;
console.log(json.stringify(obj1)); // }
console.log(json.stringify(obj2)); // }
obj2.b.c = 3;
console.log(json.stringify(obj1)); // }
console.log(json.stringify(obj2)); // }
// deep clone
obj1 = };
let obj3 = json.parse(json.stringify(obj1));
obj1.a = 4;
obj1.b.c = 4;
console.log(json.stringify(obj3)); // }
合併物件
var o1 = ;
var o2 = ;
var o3 = ;
var obj = object.assign(o1, o2, o3);
console.log(obj); //
console.log(o1); // , 注意目標物件自身也會改變。
合併具有相同屬性的物件,屬性被後續引數中具有相同屬性的其他物件覆蓋。
var o1 = ;
var o2 = ;
var o3 = ;
var obj = object.assign({}, o1, o2, o3);
console.log(obj); //
拷貝 symbol 型別的屬性
var o1 = ;
var o2 = ;
var obj = object.assign({}, o1, o2);
console.log(obj); // (cf. bug 1207182 on firefox)
object.getownpropertysymbols(obj); // [symbol(foo)]
繼承屬性和不可列舉屬性是不能拷貝的
var obj = object.create(, ,
baz:
});var copy = object.assign({}, obj);
console.log(copy); //
原始型別會被包裝為物件
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); //
異常會打斷後續拷貝任務
var target = object.defineproperty({}, "foo", ); // target 的 foo 屬性是個唯讀屬性。
object.assign(target, , , );
// 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 =
};var copy = object.assign({}, obj);
// // copy.bar的值來自obj.bar的getter函式的返回值
console.log(copy);
// 下面這個函式會拷貝所有自有屬性的屬性描述符
function completeassign(target, ...sources) , {});
// object.assign 預設也會拷貝可列舉的symbols
object.getownpropertysymbols(source).foreach(sym =>
});object.defineproperties(target, descriptors);
});return target;
}var copy = completeassign({}, obj);
console.log(copy);
// }
posted @
2019-02-17 14:20
棲息地 閱讀(
...)
編輯收藏
Object的各種方法
obj.hasownproperty prop 引數 prop 要檢測的屬性字串名稱或者symbol 返回值用來判斷乙個物件是否含有指定的屬性的boolean 所有繼承了object的物件,都會繼承到hasownproperty 方法。這個方法用來檢測乙個物件是否含有特定的自身屬性。和in運算子不同...
ArrayList的各種方法
arraylist。arraylist可以新增任何元素進去。在使用前需要新增命名空間 using system.collections 使用方法 arraylist list new arraylist list.add 表示新增單個元素 list.addrange 表示新增乙個集合元素 list....
各種方法簡介
setstrokewidth 設定空心線寬 該方法用於設定畫筆的空心線寬。該方法在矩形 圓形等圖形上有明顯的效果。public void setstrokewidth float width 其中,引數width為線寬,浮點型資料。setalpha方法 設定透明度 該方法用於設定畫筆的透明度,直觀上...