1.Object.keys(),Object.getOwnPropertyNames()
Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。
Object.keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名
let obj = {a:'123',b:'456'}
Object.keys(obj)
// ["a", "b"]
Object.getOwnPropertyNames方法与Object.keys类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。
let obj = {a:'123',b:'456'}
Object.getOwnPropertyNames(obj)
// ["a", "b"]
对于一般的对象来说,Object.keys()和Object.getOwnPropertyNames()返回的结果是一样的。只有涉及不可枚举属性时,才会有不一样的结果。Object.keys方法只返回可枚举的属性(详见《对象属性的描述对象》一章),Object.getOwnPropertyNames方法还返回不可枚举的属性名。
Object.getOwnPropertyNames([123,456]) // ["0", "1", "length"]
Object.keys([123,456]) // ["0", "1"]
2.Object.prototype.valueOf()
valueOf方法的作用是返回一个对象的“值”,默认情况下返回对象本身。
let obj = {a:'123',b:'456'}
obj.valueOf() === obj // true
3.Object.prototype.toString()
toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。
let obj = {a:'123',b:'456'}
obj.toString() // "[object Object]"
Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。
Object.prototype.toString.call(value)
- 数值:返回[object Number]。
- 字符串:返回[object String]。
- 布尔值:返回[object Boolean]。
- undefined:返回[object Undefined]。
- null:返回[object Null]。
- 数组:返回[object Array]。
- arguments 对象:返回[object Arguments]。
- 函数:返回[object Function]。
- Error 对象:返回[object Error]。
- Date 对象:返回[object Date]。
- RegExp 对象:返回[object RegExp]。
- 其他对象:返回[object Object]。
```javascript var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/[object (.*?)]/)[1].toLowerCase(); };Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"
type({}); // “object” type([]); // “array” type(5); // “number” type(null); // “null” type(); // “undefined” type(/abcd/); // “regex” type(new Date()); // “date”
<a name="ZCkBb"></a>
# 4.Object.prototype.toLocaleString()
**Object.prototype.toLocaleString方法与toString的返回结果相同,也是返回一个值的字符串形式。**
```javascript
var obj = {};
obj.toString(obj) // "[object Object]"
obj.toLocaleString(obj) // "[object Object]"
5.Object.prototype.hasOwnProperty()
let a = {b:'123'}
a.hasOwnProperty('b') // true
6.Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
let a = {b:'123'}
Object.getOwnPropertyDescriptor(a,'b')
/*
{value: "123", writable: true, enumerable: true, configurable: true}
configurable: true
enumerable: true
value: "123"
writable: true
__proto__: Object
*/
7.Object.defineProperty()
Object.defineProperty(obj, prop, descriptor)
- obj
- 要定义属性的对象。
- prop
- 要定义或修改的属性的名称或Symbol。
- descriptor
- 要定义或修改的属性描述符。 ```javascript var obj = { test:”hello” } //对象已有的属性添加特性描述 Object.defineProperty(obj,”test”,{ configurable:true | false, enumerable:true | false, value:任意类型的值, writable:true | false });
//对象新添加的属性的特性描述 Object.defineProperty(obj,”newKey”,{ configurable:true | false, enumerable:true | false, value:任意类型的值, writable:true | false });
```
value
属性对应的值,可以使任意类型的值,默认为undefined
writable
属性的值是否可以被重写。设置为true可以被重写;设置为false,不能被重写。默认为false。
enumerable
此属性是否可以被枚举(使用for…in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。
configurable
是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable)。设置为true可以被删除或可以重新设置特性;设置为false,不能被可以被删除或不可以重新设置特性。默认为false。
这个属性起到两个作用:
目标属性是否可以使用delete删除
目标属性是否可以再次设置特性
存取器描述:
注:当使用了getter或setter方法,不允许使用writable和value这两个属性
var obj = {};
var initValue = 'hello';
Object.defineProperty(obj,"newKey",{
get:function (){
//当获取值的时候触发的函数
return initValue;
},
set:function (value){
//当设置值的时候触发的函数,设置的新值通过参数value拿到
initValue = value;
}
});
//获取值
console.log( obj.newKey ); //hello
//设置值
obj.newKey = 'change value';
console.log( obj.newKey ); //change value