定义属性

  • 直接 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. 找不到 EntityType “ ” 的映射和元数据信息。

    意思是: 数据库里边有添加的新字段DB1,而程序中的的实体即“元数据”中没有这个新字段Et1,由于EntityFramework更新模型时已自动默认对DB1和Et1进行了映射(默认认为实体中存在这个字 ...

  2. pytest.8.使用pytest做简单的接口测试

    From: http://www.testclass.net/pytest/test_api/ 背景 我们现在需要测试v2ex网站的查看论坛节点信息的api.具体如下: 节点信息 获得指定节点的名字, ...

  3. pyqt信号和槽传递额外参数

    转载:fengyu09 环境:python2.7.8 —— pyqt 4.11.1 使用Pyqt编程过程中,经常会遇到给槽函数传递额外参数的情况.但是信号-槽机制只是指定信号如何连接到槽,信号定义的参 ...

  4. 方法 - 调试Dll方法

    1.exe加载dll 2.Dll属性设置2.1运行exe生成Debug/...exe2.2属性->调试->命令-> 改成 ./Debug/调试Dll.exe ../Debug/调试D ...

  5. windows10如何查看wifi密码

    1.首先,在你的电脑的右下角的WiFi的图标,右击它,选择"网络和internet设置"或者选择打开设置 :如下图 点击"更改适配器选项" 选择 WLAN选项, ...

  6. [UE4]蓝图:重写父类时调用父类方法

    右键重写的方法选择“Add call to parent function” 一定要善用这个功能,实现原有父类功能的同时实现子类特别的功能.

  7. Android应用启动会白屏一下的解决办法

    设置透明样式,如下:<activity android:name="com.hongfans.cvi.ui.MainActivity" android:configChang ...

  8. Change default network name (ens33) to old “eth0” on Ubuntu 18.04 / Ubuntu 16.04

    Change default network name (ens33) to old “eth0” on Ubuntu 18.04 / Ubuntu 16.04 By Raj Last updated ...

  9. [SQL]SQL Prompt5的工具栏按钮介绍

    这是SQL Prompt5的工具栏按钮 Refresh Suggestions 刷新提示(数据库更改表结构后,需要刷新一下) Format SQL 格式化代码(Pro版本才能启用,可定制,所有前边带红 ...

  10. mono搭建脚本整理

    一.介绍 mono项目致力于能够使得开发人员在Linux用C#开发程序. 该项目的目标是创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #编译器和共同语言 ...