Object.hasOwnProperty(prop):
判断一个对象是否包含自身的属性,而非继承属性和prototype上的属性,返回布尔值
function Foo(){
this.name = 'jacky_li'
this.hobby = function(){}
}
Foo.prototype.sex = 'male'
Foo.prototype.age = function(){}
var obj = new Foo()
obj.hasOwnProperty('name') // 自身属性,true
obj.hasOwnProperty('hobby') // 自身方法,true
obj.hasOwnProperty('sex') // 原型上的属性,返回false
obj.hasOwnProperty('age') // 原型上的方法,返回false
Obj.hasOwnProperty('toString') // 继承的方法,返回false
通常和for···in搭配使用,遍历一个对象自身的属性:
for(let item in obj) {
if(obj.hasOwnProperty(item)) {
// 遍历自身的属性
}
}
Object.assign(target, resource1, resource2, ···):
【ES6】合并多个对象
- 将多个原对象的属性和方法都合并到了目标对象上面,后合并的属性(方法)会覆盖之前的同名属性(方法)。
- 只会拷贝对象本身的属性,不会拷贝继承属性,也不会拷贝不可枚举的属性。
- 浅拷贝,如果拷贝过来的属性的值是对象等复合属性,那么只能拷贝过来一个引用。
- Object.assign只能将属性值进行复制,如果属性值是一个get(取值函数)的话,那么会先求值,然后再复制。
- 如果传入的参数不是Object,会进行类型转换。
1.为对象添加属性和方法
class Point{
constructor(x, y) {
Object.assign(this, {x, y})
}
}
2.克隆对象
function clone(origin) {
let originProto = origin.getPrototypeOf(origin);
//根据原型对象,创建新的空对象,再assign
return Object.assign(Object.create(originProto), origin)
}
3.指定默认值,合并参数
var defaults = {}
function processContent(options) {
options = Object.assign({}, defaults, options)
}
Object.create():
Object.entries(obj):
返回一个给定对象自身可枚举属性的键值对数组
返回值与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
借助此方法可以将Object转换成Map:
var obj = { foo: "bar", baz: 42 };
var map = new Map(Object.entries(obj));
console.log(map); // Map类型 { foo: "bar", baz: 42 }
Object.freeze():
阻止修改现有属性的特性和值,并阻止添加新属性,返回该对象(冻结对象)
// 彻底冻结对象
function freeze(obj){
Object.freeze(obj);
Object.values(obj).forEach(function (value,index) {
if(typeof value === 'object'){
freeze(value);
}
})
}
Object.getPrototypeOf():
读取一个对象的prototype对象
Object.setPrototypeOf():
设置一个对象的prototype对象
Object.is():
判断两个值是否相等,返回Boolean
多数情况下,Object.is()等价于'==='
对于NaN,0,+0,-0来说:
NaN === NaN // false
Object.is(NaN, NaN) // true
0 === -0 // true
Object.is(0, -0) // false
-0 === +0 // true
Object.is(-0, +0) // false
Object.keys():
返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名
Object.values():
返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值
var obj = {a: 'aa', b: 'bb'}
Object.keys(obj) //["a", "b"]
Object.values(obj) //["aa", "bb"]