定义属性

  • 直接 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 对象(对象遍历,拷贝)的更多相关文章

  1. JS之对象数组遍历?

    一.js实现遍历对象 <script> ","destroy":"97%"}; var props = ""; for ...

  2. JS中数组与对象的遍历方法实例小结

    一.数组的遍历: 首先定义一个数组 1 arr=['snow','bran','king','nightking']; 1.for循环,需要知道数组的长度; 2.foreach,没有返回值,可以不知道 ...

  3. js 对象属性遍历

    function 对象属性遍历(){ var obj = {x:1,y:2,c:3};for (var name in obj){ alert ( obj[name] )} } function 数组 ...

  4. js对象的深浅拷贝

    JS数据类型可以分为(ES5,暂时不考虑ES6): 简单数据类型:Number.String.undefined.boolean 复杂数据类型:Object.Array 简单的数据类型,往往是赋值操作 ...

  5. js中对象使用

    简单记录javascript中对象的使用 一.创建对象 //创建一个空对象 var o={}; //创建一个含有两个属性的对象,x.y var o2={x:12,y:'12',name:'JS'}; ...

  6. 判断js数组/对象是否为空

    /** * 判断js数组/对象是否为空 * isPrototypeOf() 验证一个对象是否存在于另一个对象的原型链上.即判断 Object 是否存在于 $obj 的原型链上.js中一切皆对象,也就是 ...

  7. javascript中对数组对象的深度拷贝

    在前端开发的某些逻辑中,经常需要对现有的js对象创建副本,避免污染原始数据的情况. 如果是简单的一维数组对象,可以使用两个原生方法: 1.splice var arr1 = ['a', 'b', 'c ...

  8. js中对象的一些特性,JSON,scroll家族

    一.js中对象的一些特性 对象的动态特性 1.当对象有这个属性时,会对属性的值重写 2.当对象没有这个属性时,会为对象创建一个新属性,并赋值 获得对象的属性的方式 为元素设置DOM0级事件 二.JSO ...

  9. js:对象的创建(为prototype做铺垫)

    /**  *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一  *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...

  10. js作用域对象与运用技巧

    1. JS作用域 1.1 全局作用域和局部作用域 函数外面声明的就是 全局作用域 函数内是局部作用域 全局变量可以直接在函数内修改和使用 变量,使用var是声明,没有var是使用变量. 如果在函数内使 ...

随机推荐

  1. sqlserver 查询表中的主键、外键列及外键表,外表中的主键列

    1.获取主键信息 EXEC sp_pkeys @table_name='{0}' 2.获取外键 方法二 SELECT Field=(SELECT name FROM syscolumns WHERE ...

  2. ALGO-149_蓝桥杯_算法训练_5-2求指数

    AC代码: #include <stdio.h> int main(void) { int n,m,sum; int i,j; scanf("%d %d",&n ...

  3. JavaEE Web 开发 链接 mysql 出现 Class.not found的错误

    明明在项目的library里头导入过mysql-connector.jar的包,但是在加载driver的时候eclipse一直报这个错误.解决方案其实很简单,就是同样的jar包在tomcat的安装目录 ...

  4. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

  5. [UE4]删除动画:Remove from frame 5 to frame 18

    从当前帧开始删除到结尾的动画帧

  6. 通过注解实现一个简易的Spring mvc框架

    1.首先我们来搭建架构,就建一个普通的javaweb项目就OK了,具体目录如下: 对于小白来说可以细看后面web.xml的配置,对javaweb有点研究可以忽略而过后面的web.xml配置. 2.先上 ...

  7. tomcat Error:NB:JAVA_HOME should point to a JDK not a JRE 解决方法

    环境:win7 tomcata7.0解压版本 执行:service.bat install 报错:JAVA_HOME should point to a JDK not a JRE 网上找了几种解决方 ...

  8. Javascript-多个数组是否有一样值

    //判断给出的所有数组 是否都有一样的值 function arrIsEqual(){ var array=[]; for(var i=0;i<arguments.length;i++){ ar ...

  9. 机器学习简要笔记(三)-KNN算法

    #coding:utf-8 import numpy as np import operator def classify(intX,dataSet,labels,k): ''' KNN算法 ''' ...

  10. Java - 25 Java 包(package)

    Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...