【ECMAScript5】Object对象
1. Object.create(prototype, [propertiesObject])
使用指定的原型对象及其属性去创建一个新的对象。
var parent = { x : 1, y : 1 } var child = Object.create(parent,{ z : { // z会成为创建对象的属性 writable:true, configurable:true, value: "newAdd" } }); console.log(child);
2. Object.defineProperties(obj, props)
直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
var obj = {}; Object.defineProperties(obj, { 'property1': { value: true, writable: true }, 'property2': { value: 'Hello', writable: false } }); console.log(obj); // {property1: true, property2: "Hello"}
props有以下属性可以配置:
- configurable:true 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 false。
- enumerable:true 当且仅当在枚举相应对象上的属性时该属性显现。默认为 false。
- value:与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为 undefined。
- writable:true当且仅当与该属性相关联的值可以用assignment operator改变时。默认为 false。
- get:作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。默认为 undefined。
- set:作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。默认为 undefined。
3. Object.defineProperty(obj, prop, descriptor)
在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
Object.defineProperty(Object, 'is', { value: function(x, y) { if (x === y) { // 针对+0 不等于 -0的情况 return x !== 0 || 1 / x === 1 / y; } // 针对NaN的情况 return x !== x && y !== y; }, configurable: true, enumerable: false, writable: true }); // 注意不能同时设置(writable,value) 和 get,set方法,否则浏览器会报错 // Invalid property descriptor. Cannot both specify accessors and a value or writable attribute
4. Object.keys(obj)
返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。
var arr = ["a", "b", "c"]; console.log(Object.keys(arr)); // ['0', '1', '2'] /* Object 对象 */ var obj = { foo: "bar", baz: 42 }, keys = Object.keys(obj); console.log(keys); // ["foo","baz"]
在ES5里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出 TypeError。在ES2015中,非对象的参数将被强制转换为一个对象。
Object.keys("foo"); // TypeError: "foo" is not an object (ES5 code) Object.keys("foo"); // ["0", "1", "2"] (ES2015 code)
5. hasOwnProperty()
判断对象自身属性中是否具有指定的属性
obj.hasOwnProperty('name')
6. Object.getOwnPropertyNames()
返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
var obj = { 0: "a", 1: "b", 2: "c"}; Object.getOwnPropertyNames(obj).forEach(function(val) { console.log(val); }); var obj = { x : 1, y : 2 } Object.defineProperty(obj,'z',{ enumerable : false }); console.log(Object.getOwnPropertyNames(obj)); // ["x", "y", "z"] 包含不可枚举属性 。 console.log(Object.keys(obj)); // ["x", "y"] 只包含可枚举属性 。
时刻与技术进步,每天一点滴,日久一大步!!!
本博客只为记录,用于学习,如有冒犯,请私信于我。