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是使用变量. 如果在函数内使 ...
随机推荐
- 【转】在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
参考 原文链接 @Transactional does not work on method level 描述 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational) ...
- 享元(FlyWeight)模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式.享元模式尝试 ...
- centos6.5最小化安装之后装图形化界面
查看自己系统环境 # cat /etc/issue 先要安装KDE桌面环境,执行命令: # yum groupinstall "X Window System" "KDE ...
- 升级安装APK兼容Android7.0,解决FileUriExposedException
见http://blog.csdn.net/ruancoder/article/details/67639621?utm_source=itdadao&utm_medium=referral
- spark streaming插入hbase
import java.sql.{DriverManager, ResultSet} import org.apache.spark._ import org.apache.spark.streami ...
- root用户以修改文件的方式,修改用户密码
老早就听说linux的用户密码只是存储在普通的文本文件里,但一直没去了解,今天遇上了需要强行修改的情况... 给碰到个奇葩linux,居然没有passwd命令. 生成密码摘要 openssl pass ...
- Struts2 --简单留言系统
1.创建数据表,与servlet中相同 2.创建web项目,添加struts2模块,url 选 /*,web.xml中会自动注册struts2,同时src下会自动生成struts2配置文件struts ...
- JavaWeb中四大域对象的作用范围
JavaWeb的四大作用域为:PageContext,ServletRequest,HttpSession,ServletContext: PageContext域:作用范围是整个JSP页面,是四大作 ...
- PHP unset()函数销毁变量
<?php // 销毁单个变量 unset ($var); // 销毁单个数组元素 unset ($arr['a']); // 销毁多个变量 unset ($var1, $var2, $var3 ...
- RocketMQ源码分析:(一)安装与案例演示
环境: Windows 暂时理解的功能图,不定时改动: 1. 克隆rocketmq代码 git clone git@github.com:apache/rocketmq.git 2. 进入rocket ...