<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对象的枚举属性</title>
</head>
<body>
<script>
// 用来枚举属性的对象工具函数
/*把p中的可枚举属性复制到o中,并返回o,
如果p和o中含有同名属性,则覆盖o中的属性,
这个函数并不处理getter和setter以及复制属性。*/
function extend(o,p){
for(prop in p){//遍历p中的所有属性
o[prop] = p[prop];//将属性添加到o中
}
return o;
}
var o = {
name:'anan',
age:'22',
sex:'girl',
}
var p = {
name:'xiaoke',
age:'0',
love:'sing',
father:'yy'
}
/*var extenddata = extend(o,p);
console.log(extenddata);*/
// Object {name: "xiaoke", age: "0", sex: "girl", love: "sing", father: "yy"}
/*把p中的可枚举属性复制到o中,并返回o,
如果p和o中含有同名属性,o中的属性不受影响,
这个函数并不处理getter和setter以及复制属性。*/
function merge(o,p){
for(prop in p){
if(o.hasOwnProperty(prop)) continue;//o.hasOwnProperty[prop]过滤掉已经在o中存在的属性
o[prop] = p[prop];
}
return o;
}
/*var mergedata = merge(o,p);
console.log(mergedata);*/
// Object {name: "anan", age: "0", sex: "girl", love: "sing", father: "yy"}
// 如果o中的属性在p中没有同名属性,则从o中删除这个属性。返回o
function restrict(o,p){
for(prop in o){
if(!(prop in p)) delete o[prop];//如果p中不存在,则删除
}
return o;
}
/*var restrictdata = restrict(o,p);
console.log(restrictdata);*/
// Object {name: "anan", age: "22"}
// 如果o中的属性在p中存在同名属性,则从o中删除这个属性,返回o
function subtract(o,p){
for(prop in p){
delete o[prop];
}
return o;
}
/*var subtractdata = subtract(o,p);
console.log(subtractdata);*/
// Object {sex: "girl"}

// 返回一个新对象,这个对象同时拥有o的属性和p的属性
// 如果o和p中有重名属性,使用p中的属性值
function union(o,p){
return extend(extend({},p),o)
}
// console.log(union(o,p));
// 返回一个新对象,这个对象拥有同时在o和p的属性,很像求o和p的交集,但p中属性的值被忽略
function intersection(o,p){
return restrict(extend({},o),p);
}
// console.log(intersection(o,p));
// 返回一个数组,这个数组包含的是o中可枚举的自有属性的名字
function keys(o){
if(typeof o !== 'object') throw TypeError();//参数必须是对象
var result = [];//将要返回的数组
for (var prop in o){//遍历所有可枚举的属性
if(o.hasOwnProperty(prop))//判断是否是自有属性
{
result.push(prop)//将属性名添加到数组中
}
}
return result;//返回这个数组
}
console.log(keys(o))

</script>
</body>
</html>

转载于:https://www.cnblogs.com/studyh5/p/9232868.html

用来枚举属性的对象工具函数相关推荐

  1. 中的枚举属性函数_Java 枚举:有效应用

    Java 枚举本身的介绍本文就不多说,相关资料很多,本文将讲述些 Java 枚举使用的技巧和注意事项. 枚举属性 Java 枚举除了可以定义常量以外,还可以定义属性.比如很常见的一个星期枚举 publ ...

  2. JavaScript对象中的可枚举属性和不可枚举属性

    在JavaScript中,对象的属性有可枚举和不可枚举之分,它是由对象属性描述符enumerable决定的.如果该属性是可枚举性的那么这个属性就能被for-in查找遍历到. 对象的属性描述符 在Jav ...

  3. JavaScript 对象属性 的可枚举属性与不可枚举属性(enumerable:true/false)

    原文章:https://www.cnblogs.com/kongxy/p/4618173.html 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决 ...

  4. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  5. Object.keys()返回对象自身可枚举属性组成的数组

    Object.keys()方法是对一个对象的key遍历,会把key组成一个数组返回 示例: // 参数为数组时,返回的是数组的索引 let arr1 = [1, 2, '3'] console.log ...

  6. 对象、对象的属性、对象字面量、枚举对象中的属性、可变类型、变量和对象——JS对象

    目录 一.对象 二.对象的属性 三.对象字面量 四.枚举对象中的属性 五.可变类型 六.变量和对象 数据类型: 原始值:(不可变类型) 1.数值 Number 2.大整数 BigInt 3.字符串 S ...

  7. js对象转数组可枚举属性和不可枚举属性

    前言 项目里面很多地方我们需要把数据处理一下才能应用,包括我们拿到的是一个对象,但是我们需要遍历,这个时候就需要把对象转成数组来实现我们的目的了,js对象转数组有几种方法,归纳整理一下- js对象转数 ...

  8. 让python飞:形象理解python封装、继承、函数重写、类属性、对象属性、类函数、对象函数、序列化、反序列化、pickle

    Day12大呲花参观姚明汽车厂 听闻姚明在美国办了个车厂,上海烟花厂的一箱炮竹不淡定了.他们决定要去向姚老板祝贺.所以,他们决定把自己封装在一个集装箱里走海运去美国. 到达美国后,姚明热情的接待了他们 ...

  9. JS对象的可枚举属性和不可枚举属性

    昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的. 简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. JS中对象转数组方法总结 可枚举性: 对象的每一个属性都有一 ...

最新文章

  1. linux常用文本编辑器nano/vi/vim
  2. python能做什么游戏ll-Python 应该怎么学?
  3. 【设计模式】策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  4. 学习VIM编辑器的使用
  5. 【Spring MVC 之应用篇】3_SpringMVC常见注解
  6. html绘制头像原样教程,CSS实例教程:创意CSS3头像展示教程
  7. java http请求 乱码_怎么解决java中的http请求乱码
  8. 事务演练 mysql
  9. [literature]地下铁文本
  10. 全美首个AI本科专业今秋开课,CMU每年最多招35名新生
  11. 3dmaxuv展开很多线_考研 | 最全考研复试时间线!参考价值超大!
  12. 0x07 MySQL 多表查询
  13. linux 查找py文件命令_小命令大作用---linux 下快速查找
  14. 闯关IPO,“3D云设计第一股”群核科技值不值20亿美金估值?
  15. 清华大学计算机系96级 那些缔造中国互联网的男孩们
  16. Python2.7利用xpath爬取韩寒博客(多线程版)
  17. App项目实战之路(一):概述篇
  18. python中英文古风排版_古风排版 - Calculus9 - 博客园
  19. sql中interval用法总结
  20. 《机器学习入门实战》第 01 篇 如何入门机器学习?

热门文章

  1. 解决element-ui table 表格排列错位问题
  2. 使用axios上传照片
  3. Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换
  4. Vue项目设置代理解决开发环境下的跨域问题
  5. DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions
  6. 2009编程语言排名
  7. 基于干净语言和好奇心的敏捷指导
  8. 在 Msys pacman安装vim后遇到的abcd与backspace问题..
  9. GPL与LGPL的区别
  10. 网页禁止复制的chrome插件办法