前言
- JavaScript原生提供Object对象
- JavaScript的所有其他对象都继承自Object对象,即这些对象都是Object的实例
- Object对象的原生方法分为两类:Object本身的方法、Object的实例方法
Object对象本身的方法
直接定义在Object对象的方法
Object.print = function (o) {
console.log(o);
}
print方法就是直接定义在Object对象上
Object的实例方法
定义在Object原型对象Object.prototype上的方法,可以被Object实例直接使用
Object.prototype.print = function () {
console.log(this);
};
var obj = new Object();
obj.print() // Object
Object.prototype定义了一个print方法,然后生成一个Object的实例obj,obj直接继承了Object.prototype的属性和方法,所以可以直接使用obj.print调用print方法,实质上就是obj对象的print方法就是调用Object.prototype.print方法
凡是定义在Object.prototype对象上面的属性和方法,将被所有实例对象共享
Object()
Object本身是一个函数,可以当作工具方法使用,将任意值转为对象此方法常用于保证某个值一定是对象
1、Object()返回一个空对象
var obj = Object();
// 等同于下面两条语句
var obj = Object(undefined);
var obj = Object(null);
obj instanceof Object // true
- Object()返回一个空对象
- instanceof运算符验证,一个对象是否为指定的构造函数的实例,obj对象时Object的实例
2、如果参数是原始类型的值,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
3、如果参数是一个对象,则总是返回该对象,不用转换
var arr = [];
var obj = Object(arr); // 返回原数组
obj === arr // true
var fn = function() {};
var obj = Object(fn); // 返回原函数
obj === fn // true
// 一个判断变量是否为对象的函数
function isObject(value) {
return value === Object(value);
}
isObject([]) // true
isObject(true) // false
Object构造函数
通过var obj = new Object()
的写法生成新对象,与字面量的写法var obj = {}
是等价的
构造函数的用法与工具方法相同点
-
使用时,可以接受一个参数,如果该参数是一个对象,则直接返回这个对象,如果是一个原始类型的值,则返回该值对应的包装对象
var o1 = {a: 1}; var o2 = new Object(o1); o1 === o1 // true var obj = new Object(123); obj instanceof Number // true
构造函数的用法与工具方法不同点
-
Object(value)
表示将value转成一个对象 -
new Object(value)
表示生成一个对象,它的值是value
部署在Object对象自身的方法
Object.keys()
用来遍历对象的属性
Object.keys
方法的参数是一个对象,返回一个数组,该数组的成员都是该对象自身的所有属性名,而不是继承的属性名只返回可枚举的属性
var obj = {
p1: 123,
p2: 456,
};
Object.keys(obj) // ["p1", "p2"]
Object.getOwnPropertyNames()
用来遍历对象的属性接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名
还返回不可枚举的属性名
var obj = {
p1: 123,
p2: 456,
};
Object.keys(obj) // ["p1", "p2"]
var a = ["hello", "hi"];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
可以用上面两个方法提供计算对象属性个数的方法
var obj = {
p1: 1,
p2: 2
};
Object.keys(obj).length // 2
Object.getOwnPropertyNames(obj).length // 2
其他方法
-
对象属性模型的相关方法
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对象,所有Object的实例对象都继承了这些方法
主要的Object实例对象的方法
-
Object.prototype.valueOf()
:返回当前对象对应的值 -
Object.prototype.toString()
:返回当前对象对应的字符串形式 -
Object.prototype.toLocaleString()
:返回当前对象对应的本地字符串形式 -
Object.prototype.hasOwnProperty()
:判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性 -
Object.prototype.isPrototypeOf()
:判断当前对象是否为另一个对象的原型 -
Object.prototype.propertyIsEnumerable()
:判断某个属性是否可枚举
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。