jsjavaScriptobject对象属性和所有⽅法及es6对象的新增⽅法(霸霸看了都说
好)
ES6 Object对象的新增⽅法
Object.is()
它⽤来⽐较两个值是否严格相等,与严格⽐较运算符(===)的⾏为基本⼀致。
Object.is('foo','foo')
// true
Object.is({},{})
// false
Object.assign()
Object.assign()⽅法⽤于对象的合并,将源对象(source)的所有可枚举属性,复制到⽬标对象(target)。
const target ={ a:1};
const source1 ={ b:2};
const source2 ={ c:3};
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
Object.keys()
返回⼀个数组,成员是参数对象⾃⾝的(不含继承的)所有可遍历(enumerable)属性的键名。
var obj ={ foo:'bar', baz:42};
Object.keys(obj)
// ["foo", "baz"]
Object.values()
返回⼀个数组,成员是参数对象⾃⾝的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj ={ foo:'bar', baz:42};
Object.values(obj)
// ["bar", 42]
返回指定对象所有⾃⾝属性(⾮继承属性)的描述对象。
const obj ={
foo:123,
get bar(){return'abc'}
};
/
/ { foo:
// { value: 123,
// writable: true,
// enumerable: true,
// configurable: true },
// bar:
// { get: [Function: get bar],
// set: undefined,
// enumerable: true,
// configurable: true } }
Object.setPrototypeOf()
⽤来设置⼀个对象的原型对象(prototype),返回参数对象本⾝。它是 ES6 正式推荐的设置原型对象的⽅法。
let proto ={};
let obj ={ x:10};
Object.setPrototypeOf(obj, proto);
proto.y =20;
proto.z =40;
obj.x // 10
obj.y // 20
obj.z // 40
该⽅法与Object.setPrototypeOf⽅法配套,⽤于读取⼀个对象的原型对象。
function Rectangle(){
// ...
}
const rec =new Rectangle();
// true
Object.setPrototypeOf(rec, Object.prototype);
// false
返回⼀个数组,成员是参数对象⾃⾝的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
const obj ={ foo:'bar', baz:42};
// [ ["foo", "bar"], ["baz", 42] ]
Object.fromEntries()
Object.fromEntries()⽅法是ies()的逆操作,⽤于将⼀个键值对数组转为对象。
Object.fromEntries([
['foo','bar'],
['baz',42]
])
// { foo: "bar", baz: 42 }
对象属性
structor
返回创建实例对象的 Object 构造函数的引⽤。注意,此属性的值是对函数本⾝的引⽤,⽽不是⼀个包含函数名称的字符串。对原始类型来说,如1,true和"test",该值只可读。
var o ={};
var o =new Object;
var a =[];
var a =new Array;
var n =new Number(3);
Object⽅法
创建⼀个新对象,使⽤现有的对象来提供新创建的对象的__proto__。
const person ={
isHuman:false,
printIntroduction:function(){
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
const me = ate(person);
me.name ='Matthew';// “name”是设置在“me”上的属性,⽽不是设置在“person”上的属性
me.isHuman =true;// 继承的属性可以被覆盖
me.printIntroduction();
// "My name is Matthew. Am I human? true"
Object.defineProperties()
直接在⼀个对象上定义新的属性或修改现有的属性,并返回该对象。
var obj ={};
Object.defineProperties(obj,{
'property1':{
value:true,
writable:true
},
'property2':{
value:'Hello',
writable:false
}
// etc. etc.
});
Object.defineProperty()
直接在⼀个对象上定义⼀个新的属性,或者修改⼀个对象的现有属性,并返回此对象。const object1 ={};
Object.defineProperty(object1,'property1',{
value:42,
writable:false
});
object1.property1 =77;
// 在严格模式下抛出错误
console.log(object1.property1);js合并两个数组
// 42
Object.freeze()
冻结对象。其他代码⽆法删除或更改其属性。
prop:42
};
Object.freeze(obj);
obj.prop =33;
// 在严格模式下抛出错误
console.log(obj.prop);
// 42
返回指定对象上⼀个⾃有对应的属性
const object1 ={
property1:42
};
const descriptor1 = OwnPropertyDescriptor(object1,'property1');
console.figurable);
/
/ true
console.log(descriptor1.value);
// 42
返回⼀个由指定对象的所有⾃⾝属性的属性名(包括不可枚举的属性但不包括符号值作为名称的属性)组成的数组。
var arr =["a","b","c"];
console.OwnPropertyNames(arr).sort());// ["0", "1", "2", "length"]
// 类数组对象
var obj ={0:"a",1:"b",2:"c"};
console.OwnPropertyNames(obj).sort());// ["0", "1", "2"]
// 使⽤Array.forEach输出属性名和属性值
console.log(val +" -> "+ obj[val]);
});
// 输出
// 0 -> a
// 1 -> b
// 2 -> c
//不可枚举属性
var my_obj = ate({},{
getFoo:{
value:function(){return this.foo;},
enumerable:false
}
});
my_obj.foo =1;
console.OwnPropertyNames(my_obj).sort());// ["foo", "getFoo"]
返回⼀个给定对象⾃⾝的所有符号属性的数组。
var a =Symbol("a");
var b = Symbol.for("b");
obj[a]="localSymbol";
obj[b]="globalSymbol";
var objectSymbols = OwnPropertySymbols(obj);
console.log(objectSymbols.length);// 2
console.log(objectSymbols)// [Symbol(a), Symbol(b)]
console.log(objectSymbols[0])// Symbol(a)
Object.prototype.hasOwnProperty()
会返回⼀个布尔值,指⽰对象⾃⾝属性中是否具有指定的属性(也就是,是否有指定的键)。
const object1 ={};
object1.property1 =42;
console.log(object1.hasOwnProperty('property1'));
// true
console.log(object1.hasOwnProperty('toString'));
/
/ false
console.log(object1.hasOwnProperty('hasOwnProperty'));
// false
Object.isExtensible()
判断⼀个对象是否是可扩展的(是否可以在它上⾯添加新的属性)。
// 新对象默认是可扩展的.
var empty ={};
Object.isExtensible(empty);// === true
// ...可以变的不可扩展.
Object.preventExtensions(empty);
Object.isExtensible(empty);// === false
/
/ 密封对象是不可扩展的.
var sealed = Object.seal({});
Object.isExtensible(sealed);// === false
// 冻结对象也是不可扩展.
var frozen = Object.freeze({});
Object.isExtensible(frozen);// === false
Object.isFrozen()
判断⼀个对象是否被冻结。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论