对象的创建:

1 字面量创建
    var obj = {a:1,b:2};
构造函数创建
    var obj = new Object();
obj.a = 1;
obj.b = 2;

3 Object.create(targetObj):根据已有对象创建

  • 使用已有对象提供新对象的原型链,现有对象会将targetObj作为自己的原型链
  • 返回一个新对象,带着指定的原型对象和属性
  • 该方法可以用于实现类的继承
    var span = document.createElement("span");
span.k = "extends!";
var obj1 = Object.create(span);
// console.dir(obj1.__proto__.k);//extends!
console.dir(obj1.__proto__);//span
console.log(obj1.prototype);//undefined
console.log(obj1 === span);//false,返回的是新对象

Object.assign 对象浅复制

Object.assign(targetObj,sourceObj1,sourceObj2......);

该方法用于将一个或多个源对象的属性拷贝(浅复制)到目标对象,返回目标对象。

  • 只能复制对象属性,不能复制对象的原型链属性
  • 只能复制可枚举类型,
  • 引用关系也会一同被复制,只能浅复制
  • 多个源对象复制时,如果有相同的属性,后面的将会覆盖前面的
  • 复制属性定义应当使用Object.getOwnPropertyDescriptor()和Object.defineProperty()
  • String和Symbol类型也会被拷贝,undefined和null可以被拷贝不报错
  • IE不支持该方法,需要考虑兼容
        var t = {x:1}
var obj = {a:1,b:null,c:undefined,d:t}
var obj2 = Object.assign({},obj);
console.log(obj2);//可以复制null
obj2.d.x = 1000;
console.log(t.x);//1000,浅复制,存在引用

Object.assign与Object.create

assign:复目标对象属性给自身,包括原型

create:将目标对象作为自己的原型

        var span = {};
span.t = "get prop!";
span.__proto__.x = "get prop!";
var obj = Object.create(span);
var obj1 = Object.assign({},span);
console.log("create:",obj);
console.log("assign:",obj1);

Object.defineProperty(obj,property,descObj)

        var obj = {_b:1};
Object.defineProperty(obj,"a",{
configurable:false,//是否可删除属性并且重定义描述对象
enumerable:false,//是否可枚举,比如for循环和Object.keys
writable:false,//是否可更改(改的话不会报错但是改不了)
value:10
});
// obj.a = 1000;
// console.log(obj.a);//10,不可更改
// console.log(Object.keys(obj));//没有a,不可枚举
for ( var key in obj) {
console.dir(key);//没有a,不可枚举
}
delete obj.a;
console.log(obj.a);//不可删除
 以上四个属性在不显式调用Object.defineProperty()的时候,
    前三个默认值都为true,而value为你自己设定的值,如果不设定的话则为undefined。一旦用defineProperty设置,前三个默认为false
 原型链属性不可被修改描述对象
  

Object.defineProperties(obj,{prop1:{},prop2:{}......})

  • 该方法用于为一个对象定义多个属性描述对象Object.defineProperties(obj,{prop1:{},prop2:{}......})

Object.getOwnPropertyNames(obj)

  • 该方法用于获取对象的全部属性名称组成的数组,并返回该数组

Object.getOwnPropertyDescriptor(obj,prop)

  • 该方法用于获取对象某个属性的描述对象,并返回该对象

obj.propertyIsEnumerable(prop)

  • 该方法用于判断对象是否包含某个属性,返回布尔值

obj.isPrototypeOf(o)

  • obj是否是o的原型
  • 是否有类的继承关系、

Obj.hasOwnProperty(prop)和 in

  • hasOwnProperty只能判断对象属性,不能判断原型属性
  • in既能判断对象属性,又能判断原型属性
        var obj = {a:1,b:2,c:3}
var obj1 = Object.create(obj);
console.log("a" in obj1);//true
console.log(obj1.hasOwnProperty("a"));//false

Object.frozen(obj)

  • 冻结对象,不能删除与重置属性,不能重置属性的描述对象
  • 不能被Object.create()增加冻结的对象属性
  • 可以被Obejct.assign()复制,并且复制之后的属性可删除和修改

Object.is()

判断,等同于===,但是有几个例外情况

console.log(NaN === NaN);//false
console.log(Object.is(NaN,NaN));//true
 

JavaScript 对象属性与方法的更多相关文章

  1. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  2. 转: JavaScript 获取对象属性和方法

    一.获取对象属性和方法 Object.keys()for in 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返回的数组的所有属性(可枚举或不可枚举 ...

  3. JavaScript 获取对象属性和方法

    ShineJaie 原创整理,转载请注明出处. 一.获取对象属性和方法 Object.keys() 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返 ...

  4. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

  5. JavaScript document属性和方法

    JavaScript document属性和方法 --------------------------------------------属性: 1. Attributes     存储节点的属性列表 ...

  6. 删除要被替换的元素的所有事件处理 程序和 JavaScript 对象属性

    使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明显.在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题.假设 某个 ...

  7. JavaScript对象属性的基础教程指南

    JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...

  8. Js基础知识7-JavaScript所有内置对象属性和方法汇总

    对象什么的,程序员可是有很多呢... JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScr ...

  9. JavaScript 对象属性

    JavaScript 对象属性 属性中的 . 和 [ ](点 和 方括号)的区别 .  :取对象自身的属性值: [ ]:括号内容可以是变量: var obj = {}; obj.name = 'Twx ...

随机推荐

  1. JAVA 注解教程(一)简单介绍

    相关网址 https://blog.csdn.net/briblue/article/details/73824058 --- 已经整理成笔记 https://blog.csdn.net/bao199 ...

  2. Spring Cloud介绍

    Spring Cloud中国社区博客 Spring Cloud发展到2016年,国内关注的人越来越多,但是相应学习交流的平台和材料比较分散,不利于学习交流,因此Spring Cloud中国社区应运而生 ...

  3. 五、抗DDOS防火墙

    简介 DDoS全名是Distribution Denial of service (分布式拒绝服务攻击).拒绝服务攻击的攻击方式有很多种,最基本的Dos攻击就是利用合理的服务请求来占用过多的服务资源, ...

  4. mysql数据库函数之left()、right()、substring()、substring_index()

    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:l ...

  5. 关于testbench

    区别与verilog HDL代码,主要留意以下内容: 1,语言本身支持的特征和可综合的代码是两回事,不是所有verilog语言都可以转化为硬件的. 2,testbench作为top module,不需 ...

  6. Spark 并行计算模型:RDD

    Spark 允许用户为driver(或主节点)编写运行在计算集群上,并行处理数据的程序.在Spark中,它使用RDDs代表大型的数据集,RDDs是一组不可变的分布式的对象的集合,存储在executor ...

  7. Day4 注解 泛型

    注解是什么 注释是绑定到程序源代码元素的元数据,对它们运行的​​代码的操作没有影响. https://blog.csdn.net/SDDDLLL/article/details/93509699 他们 ...

  8. Win10 系统运行VsCode出现白屏的问题(亲测有效)

    Win10 系统运行VsCode出现白屏的问题(亲测有效) 新买的本本,昨天VScode运行还正常,今天打开一直白屏,什么都没有,只有几个小格格,也不是卡死的那种,可以轻松关闭, 刚开始以为版本问题, ...

  9. MODULE BUILD FAILED: ERROR: COULDN’T FIND PRESET “ES2015” RELATIVE TO DIRECTORY

    npm run dev 遇到报错: Module build failed: Error: Couldn't find preset "es2015" relative to di ...

  10. Pandas数据结构(一)——Pandas Series

    Pandas 是 Python 中基于Numpy构建的数据操纵和分析软件包,包含使数据分析工作变得快速简洁的高级数据结构和操作工具.通过Pandas Series 和 Pandas DataFrame ...