JS 对象(对象遍历,拷贝)
定义属性
- 直接 obj.对象 的方法
- Object.defineProperty(obj, prop, descriptor) ,这种方法可以设置 或者修改对象属性的访问权限
数据描述符和存取描述符均具有以下可选键值:
configurabl
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false
enumerable
当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false
数据描述符同时具有以下可选键值:
value
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined
writable
当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false
对象合并
Object.assign(target,source1,source2)
Return 返回合并后的新对象
注意
如果合并的对象中有相同的属性,那么后面的会覆盖前面的
var obj = {
name : '小白',
color : 'white'
}
var obj1 = {
say : function(){
console.log('汪汪');
}
}
var obj2 = {
name : '小黑'
}
var newObj = Object.assign(obj,obj1,obj2)
console.log(newObj.name); //输出 小黑
newObj.say();
判断属性是否存在
Object.hasOwnProperty()
存在 返回true 不存在 返回false
获得对象属性
Object.keys 返回一个数组中包含所有属性名
Object.values 返回一个数组中包含所有属性值
遍历属性
- for...in... 最常见的一种方式,可以遍历对象当前所有可见属性,包括原型中定义的属性
- Object.keys 获得对象所有可见属性的属性名,不包括原型中定义属性
- Object.getOwnPropertyNames 获得对象所有属性,不包括原型中定义属性
function Dog(name,color){
this.name = name;
this.color = color;
}
Dog.prototype = {
foods : ['bones','meat'],
say : function(){
console.log('汪汪');
},
eat : function(){
console.log('i am '+this.nam+' i eat '+this.foods.join(','));
}
}
var xiaohei = new Dog('小黑','black');
Object.defineProperty(xiaohei,'name',{enumerable:false});
console.log(Object.keys(xiaohei));
//输出 ["color"]
console.log(Object.getOwnPropertyNames(xiaohei));
//输出 (2) ["name", "color"]
对象拷贝
浅拷贝 : 即拷贝当前对象地址给一个新的对象,任何对象改变会引起其他对象改变
var xiaohei = new Dog('小黑','black');
var xiaoheihei = xiaohei ; //对象浅拷贝
xiaoheihei.name = '小黑黑'
console.log(xiaohei.name);
//输出 小黑黑
深拷贝 : 即将对象所有属性和方法拷贝一份给一个新的对象
var xiaohei = new Dog('小黑','black');
var xiaobai = {};
for(let key in xiaohei){
xiaobai[key] = xiaohei[key]
}
xiaobai.name = "小白"
console.log(xiaohei.name);
//输出 小黑
数组拷贝
数组与对象类似,都属于引用型变量,因此直接使用 = 只是拷贝地址,如需要拷贝数组,可以使用 slice 方法
var arr = [1,2,3,4] ;
arr1 = arr ; //浅拷贝
arr2 = arr.slice(0); //深拷贝
arr[0] = 'hello' ;
console.log(arr1); //'hello',2,3,4
console.log(arr2); //1,2,3,4
JS 对象(对象遍历,拷贝)的更多相关文章
- JS之对象数组遍历?
一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...
- JS中数组与对象的遍历方法实例小结
一.数组的遍历: 首先定义一个数组 1 arr=['snow','bran','king','nightking']; 1.for循环,需要知道数组的长度; 2.foreach,没有返回值,可以不知道 ...
- js 对象属性遍历
function 对象属性遍历(){ var obj = {x:1,y:2,c:3};for (var name in obj){ alert ( obj[name] )} } function 数组 ...
- js对象的深浅拷贝
JS数据类型可以分为(ES5,暂时不考虑ES6): 简单数据类型:Number.String.undefined.boolean 复杂数据类型:Object.Array 简单的数据类型,往往是赋值操作 ...
- js中对象使用
简单记录javascript中对象的使用 一.创建对象 //创建一个空对象 var o={}; //创建一个含有两个属性的对象,x.y var o2={x:12,y:'12',name:'JS'}; ...
- 判断js数组/对象是否为空
/** * 判断js数组/对象是否为空 * isPrototypeOf() 验证一个对象是否存在于另一个对象的原型链上.即判断 Object 是否存在于 $obj 的原型链上.js中一切皆对象,也就是 ...
- javascript中对数组对象的深度拷贝
在前端开发的某些逻辑中,经常需要对现有的js对象创建副本,避免污染原始数据的情况. 如果是简单的一维数组对象,可以使用两个原生方法: 1.splice var arr1 = ['a', 'b', 'c ...
- js中对象的一些特性,JSON,scroll家族
一.js中对象的一些特性 对象的动态特性 1.当对象有这个属性时,会对属性的值重写 2.当对象没有这个属性时,会为对象创建一个新属性,并赋值 获得对象的属性的方式 为元素设置DOM0级事件 二.JSO ...
- js:对象的创建(为prototype做铺垫)
/** *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一 *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...
- js作用域对象与运用技巧
1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...
随机推荐
- SET FMTONLY ON
有时候在执行SQL查询语句时,仅仅需要知道检索的元数据,而不是具体的数据行,可以设置SET FMTONLY ON. SET FMTONLY只将元数据返回给客户端. 语法SET FMTONLY { ON ...
- Selenium2+python自动化38-显式等待(WebDriverWait)
From: https://www.cnblogs.com/yoyoketang/p/6517477.html 前言: 在脚本中加入太多的sleep后会影响脚本的执行速度,虽然implicitly_w ...
- ASP.NET MVC如何在Action中返回脚本并执行
我们都知道在aspx页面的cs文件中只要用Respos.Write("<script></scritp>")就可以在前台执行脚本 但是在MVC中就不一样了, ...
- 数据库SQL语言学习--上级练习1(数据查询)
上机练习1 1. 启动SQL Server 2008中的 SQL Server Management Studio. 2. 创建数据库Student ...
- 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...
- Uc的个人中心很奇葩
Uc的个人中心很奇葩,未登录前点击头像是图2选择性别,点击云同步才是图3登录,登录之后,想退出,要点击图1的头像进入图4编辑资料,然后右上角退出登录…摸索了好久,差点抓狂…把你们的产品经理叫出来一下… ...
- 基于Html的SEO(很基础,更是前端必须掌握之点)
文章来源:百度文库 Html代码seo优化最佳布局,实例讲解 众所周知,搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. ...
- 这个技术的出现,可能会颠覆阿里云、AWS!
在大数据和人工智能的带动下,越来越多的大型公司开始争夺云服务市场这块香饽饽. AWS.阿里云.Azure,这些耳熟能详的云服务商依然牢牢占据着全球70%以上的市场,但是随着去年“区块链”这个领域的兴起 ...
- 后台对象转化成json数据返回给前端
一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据 二.下载jar依赖包:可以去这里下 ...
- 不同版本Eclipse对JDK版本要求
原文:https://blog.csdn.net/kevin_pso/article/details/54971739 1.Eclipse 4.6 (Neon)---需要JDK1.8版本,官网解释如下 ...