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的返回结果相同,也是返回一个值的字符串形式。**```javascriptvar 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: trueenumerable: truevalue: "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属性对应的值,可以使任意类型的值,默认为undefinedwritable属性的值是否可以被重写。设置为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
