在JavaScript中,由于JavaScript的弱类型特征,使得JavaScript变的更加灵活,同样JavaScript中对象也是如此。
var o = {
name : "wang",
age : 20,
}
var p = {
name : "zhou",
age1 : 21,
}
以上两个函数为例。
把p中的可枚举属性复制到o中,并返回o,如果o和p中含有同名属性,则覆盖o中的属性,这个函数并不处理getter和setter以及复制属性。
function extend(o,p){
for(var prop in p){
o[prop] = p[prop];
}
return o;
}
将p中的属性复制到o中,返回o,如果o中有属性将不受影响,这个函数并不处理getter和setter以及复制属性。
function merge(o,p){
for(var prop in p ){
if(o.hasOwnProperty(prop)){
continue;
}
o[prop] = p[prop];
}
return o;
}
如果o的属性在p中没有同名属性,则从o中删除这个属性并返回。
function restrict(o,p){
for(var prop in o){
if(!(prop in p)){
delete o[prop];
}
}
return o;
}
如果o中的属性在p中存在同名属性,则从o中删除这个属性并返回。
function subtract(o,p){
for(var prop in o ){
if(prop in p){
delete o[prop];
}
}
return o ;
}
以上是一些方法,下面用上面的方法做一些实例。
返回一个新对象,这个对象同时拥有o的属性和p的属性,如果o和p有重名属性,使用p中的属性。
function union(o,p){
return extend(extend({},o),p);
}
返回一个新对象,这个对象拥有同时在o和p中出现的属性,很像求交集,但p中的属性值被忽略。
function intersection(o,p){
return restrict(extend({},o),p);
}
返回一个数组,这个数组包含o中可枚举的自由属性的名字。
function keys(o){
if(typeof(o) !== 'object'){
throw TypeError();
}
var arr = [];
for(var prop in o){
if(o.hasOwnProperty(prop)){
arr.push(prop);
}
}
return arr;
}
在ES5.0中有定义用以枚举属性的函数。
Object.keys()返回数组,数组由对象中可枚举属性组成。
console.log(Object.keys(o));
Object.getOwnPropertyNames(),返回对象中所有自有属性的名称,不仅仅是可枚举的属性
console.log(Object.getOwnPropertyNames(o));
喜欢就收藏下。
--主页传送门--