Object
对象
-
JavaScript
的所有其他对象都继承自Object
对象,即那些对象都是Object
的实例。 -
Object
对象的原生方法分成两类:Object
本身的方法与Object
的实例方法。 - 凡是定义在
Object.prototype
对象上面的属性和方法,将被所有实例对象共享。
Object
属性与方法
静态方法:直接定义在 Object
对象本身上的方法。
实例属性:定义在 Object
原型对象 Object.prototype
上的属性,一般用于数据存储与修改。
实例方法:定义在 Object
原型对象 Object.prototype
上的方法,可以被 Object
实例直接使用,所有实例对象都继承了这些方法。
Object
用法
工具函数和构造函数
Object()
工具函数
-
Object
本身是一个函数,可以当作工具方法使用,将任意值转为对象。这个方法常用于保证某个值一定是对象。 - 如果参数为空(或者为
undefined
和null
),Object()
返回一个空对象。
var obj = Object();
// 等同于
var obj = Object(undefined);
var obj = Object(null);
obj instanceof Object // true
instanceof
运算符用来验证,一个对象是否为指定的构造函数的实例。obj instanceof Object 返回 true,就表示 obj 对象是 Object 的实例。
- 如果参数是原始类型的值,
Object
方法将其转换成对象,就是原始类型值对应的包装对象。
var obj = Object(1);
obj instanceof Object // true
obj instanceof Number // true
var obj = Object('foo');
obj instanceof Object // true
obj instanceof String // true
var obj = Object(true);
obj instanceof Object // true
obj instanceof Boolean // true
- 如果
Object
方法的参数是一个对象,它总是返回该对象,即不用转换。
var arr = [];
var obj = Object(arr); // 返回原数组
obj === arr // true
var value = {};
var obj = Object(value) // 返回原对象
obj === value // true
var fn = function () {};
var obj = Object(fn); // 返回原函数
obj === fn // true
//应用:判断变量是否为对象
function isObject(value) {
return value === Object(value);
}
isObject([]) // true
isObject(true) // false
Object
构造函数
- 当做构造函数使用时,前面加上
new
命令,这种方法可以直接通过Object
来生成新对象。
var obj = new Object();
//等价于
var obj = {}
- 可以接受一个参数,如果该参数是一个对象,则直接返回这个对象;如果参数是一个原始类型的值,则返回该值对应的包装对象。
var o1 = {a: 1};
var o2 = new Object(o1);
o1 === o2 // true
var obj = new Object(123);
obj instanceof Number // true
用法和上面的工具函数相似,但是 Object(value)
与 new Object(value)
两者的语义是不同的,Object(value)
表示将 value
转成一个对象,new Object(value)
则表示新生成一个对象,它的值是 value
。
Object
方法
Object
静态方法
遍历对象的属性
- 可以用这两个方法计算对象属性个数。
- Object.keys:遍历可枚举属性
- Object.getOwnPropertyNames:可遍历不可枚举属性
var a = ['Hello', 'World'];
Object.keys(a)
// ["0", "1"]
Object.getOwnPropertyNames(a)
// ["0", "1", "length"]
//length为不可枚举属性
对象属性模型的相关方法
- Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
- Object.defineProperty():通过描述对象,定义某个属性。
- Object.defineProperties():通过描述对象,定义多个属性。
控制对象状态的方法
- Object.preventExtensions():防止对象扩展。
- Object.isExtensible():判断对象是否可扩展。
- Object.seal():禁止对象配置。
- Object.isSealed():判断一个对象是否可配置。
- Object.freeze():冻结一个对象。
- Object.isFrozen():判断一个对象是否被冻结。
原型链相关方法
- Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
- Object.getPrototypeOf():获取对象的Prototype对象。
Object
实例方法
- Object.prototype.valueOf():返回当前对象对应的值。
- Object.prototype.toString():返回当前对象对应的字符串形式。
- Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。
-
Object.prototype.hasOwnProperty()
:判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
接受一个字符串作为参数,返回一个布尔值,表示该实例对象自身是否具有该属性。
var obj = {
p: 123
};
obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false
- Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。
- Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。