1.Object.keys(),Object.getOwnPropertyNames()

Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。
Object.keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名

  1. let obj = {a:'123',b:'456'}
  2. Object.keys(obj)
  3. // ["a", "b"]

Object.getOwnPropertyNames方法与Object.keys类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。

  1. let obj = {a:'123',b:'456'}
  2. Object.getOwnPropertyNames(obj)
  3. // ["a", "b"]

对于一般的对象来说,Object.keys()和Object.getOwnPropertyNames()返回的结果是一样的。只有涉及不可枚举属性时,才会有不一样的结果。Object.keys方法只返回可枚举的属性(详见《对象属性的描述对象》一章),Object.getOwnPropertyNames方法还返回不可枚举的属性名。

  1. Object.getOwnPropertyNames([123,456]) // ["0", "1", "length"]
  2. Object.keys([123,456]) // ["0", "1"]

2.Object.prototype.valueOf()

valueOf方法的作用是返回一个对象的“值”,默认情况下返回对象本身。

  1. let obj = {a:'123',b:'456'}
  2. obj.valueOf() === obj // true

3.Object.prototype.toString()

toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。

  1. let obj = {a:'123',b:'456'}
  2. obj.toString() // "[object Object]"

Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。

  1. 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]。
    1. Object.prototype.toString.call(2) // "[object Number]"
    2. Object.prototype.toString.call('') // "[object String]"
    3. Object.prototype.toString.call(true) // "[object Boolean]"
    4. Object.prototype.toString.call(undefined) // "[object Undefined]"
    5. Object.prototype.toString.call(null) // "[object Null]"
    6. Object.prototype.toString.call(Math) // "[object Math]"
    7. Object.prototype.toString.call({}) // "[object Object]"
    8. Object.prototype.toString.call([]) // "[object Array]"
    ```javascript var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/[object (.*?)]/)[1].toLowerCase(); };

type({}); // “object” type([]); // “array” type(5); // “number” type(null); // “null” type(); // “undefined” type(/abcd/); // “regex” type(new Date()); // “date”

  1. <a name="ZCkBb"></a>
  2. # 4.Object.prototype.toLocaleString()
  3. **Object.prototype.toLocaleString方法与toString的返回结果相同,也是返回一个值的字符串形式。**
  4. ```javascript
  5. var obj = {};
  6. obj.toString(obj) // "[object Object]"
  7. obj.toLocaleString(obj) // "[object Object]"

5.Object.prototype.hasOwnProperty()

  1. let a = {b:'123'}
  2. a.hasOwnProperty('b') // true

6.Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)

  1. let a = {b:'123'}
  2. Object.getOwnPropertyDescriptor(a,'b')
  3. /*
  4. {value: "123", writable: true, enumerable: true, configurable: true}
  5. configurable: true
  6. enumerable: true
  7. value: "123"
  8. writable: true
  9. __proto__: Object
  10. */

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 });

  1. ```
  2. value
  3. 属性对应的值,可以使任意类型的值,默认为undefined
  4. writable
  5. 属性的值是否可以被重写。设置为true可以被重写;设置为false,不能被重写。默认为false。
  6. enumerable
  7. 此属性是否可以被枚举(使用for…in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。
  8. configurable
  9. 是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable)。设置为true可以被删除或可以重新设置特性;设置为false,不能被可以被删除或不可以重新设置特性。默认为false。
  10. 这个属性起到两个作用:
  11. 目标属性是否可以使用delete删除
  12. 目标属性是否可以再次设置特性

存取器描述:
注:当使用了getter或setter方法,不允许使用writable和value这两个属性

  1. var obj = {};
  2. var initValue = 'hello';
  3. Object.defineProperty(obj,"newKey",{
  4. get:function (){
  5. //当获取值的时候触发的函数
  6. return initValue;
  7. },
  8. set:function (value){
  9. //当设置值的时候触发的函数,设置的新值通过参数value拿到
  10. initValue = value;
  11. }
  12. });
  13. //获取值
  14. console.log( obj.newKey ); //hello
  15. //设置值
  16. obj.newKey = 'change value';
  17. console.log( obj.newKey ); //change value