说明

重学前端是程劭非(winter)在极客时间开的一个专栏,在此主要整理我的学习笔记。如有侵权,请联系我,谢谢。

javascript对象特征

  • 对象具有唯一标识性:完全相同的两个对象,也不是同一个对象
  • 对象具有状态:同一对象会处于不同状态下
  • 对象具有行为:行为可以改变对象的状态

对象的唯一性是用内存地址来体现的, 对象具有唯一标识的内存地址,所有具有唯一标识性。

 var o1 = { a: 1 };var o2 = { a: 1 };console.log(o1 == o2); // false
复制代码

对象的行为和状态在js里是对象的属性。

    var o = { d: 1,f() {console.log(this.d);}    };复制代码

在js里对象是动态的,可以在运行时给对象添加属性。

    var o = { a: 1 };o.b = 2;console.log(o.a, o.b); //1 2
复制代码

javascript对象的两类属性

在js里,属性不是简单的名称和值,js用一组特征(attribute)来描述属性(property)

数据属性的四个特征

  • value:属性的值
  • writable:属性是否能被赋值
  • enumrable:能否用for in枚举该属性
  • configurable:能否被删除或修改

访问器(getter/setter)属性的四个特征

  • getter:函数或undefined,在取属性值的时候被调用
  • setter:函数或undefined,在设置属性值的时候被调用
  • enumrable:能否用for in枚举该属性
  • configurable:能否被删除或修改

访问器属性使得属性在读和写时执行代码,它允许使用者在写和读属性时,得到完全不同的值,它可以视为一种函数的语法糖。

我们通常用于定义属性的代码会产生数据属性,其中的writable、enumerable、configurable 都默认为true,可以用getOwnPropertyDescriptor来查看

    var o = { a: 1 };o.b = 2;//a 和 b 皆为数据属性Object.getOwnPropertyDescriptor(o,"a") // {value: 1, writable: true, enumerable: true, configurable: true}Object.getOwnPropertyDescriptor(o,"b") // {value: 2, writable: true, enumerable: true, configurable: true}
复制代码

如果我们要想改变属性的特征,或者定义访问器属性,我们可以使用defineProperty

    var o = { a: 1 };Object.defineProperty(o, "b", {value: 2, writable: false, enumerable: false, configurable: true});//a 和 b 都是数据属性,但特征值变化了Object.getOwnPropertyDescriptor(o,"a"); // {value: 1, writable: true, enumerable: true, configurable: true}Object.getOwnPropertyDescriptor(o,"b"); // {value: 2, writable: false, enumerable: false, configurable: true}o.b = 3;console.log(o.b); // 2复制代码

在定义对象时,可以用get和set关键字来定义访问器属性

var o = {get a(){return 1}
}console.log(o.a)
复制代码

访问器属性跟数据属性不同,每次访问属性都会执行 getter或者 setter 函数。这里我们的 getter 函数返回1,所有o.a返回1

js对象在运行时是一个“属性的集合”,属性以字符串或者symbol为key,以数据属性特征值或者访问器属性特征值为value

转载于:https://juejin.im/post/5d0b9af45188251627587961

重学前端-学习笔记-JavaScript对象相关推荐

  1. 重学前端学习笔记(八)--JavaScript中的原型和类

    笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...

  2. 重学前端学习笔记(三十六)--Flex 布局

    笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...

  3. 重学前端学习笔记(二十二)--选择器的机制

    笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...

  4. 重学前端学习笔记(十三)--浏览器工作解析(三)

    笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...

  5. 重学前端学习笔记(五)-JavaScript原型

    JavaScript原型 中文中有个成语叫做"照猫画虎",这里的猫看起来就是虎的原型. 最为成功的流派是使用"类"的方式来描述对象,这诞生了诸如 C++.Jav ...

  6. 前端学习笔记——JavaScript进阶

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.JavaScript 面向对象 1. 面向对象编程介绍 1.1 两大编程思想 1.2 面向过程编程 1.3 面向对 ...

  7. [前端学习笔记]JavaScript基础知识

    一.JS三种书写位置 行内式 直接写到元素的内部. <input type="button" value="唐伯虎" onclick="aler ...

  8. Web前端学习笔记——JavaScript之数组、函数、作用域

    数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...

  9. Web前端学习笔记——JavaScript之WEBAPI、BOM、DOM及获取页面元素

    Web API介绍 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访 ...

最新文章

  1. ARKit从入门到精通-ARKit工作原理及流程介绍
  2. 人工智能应用于建筑领域新前沿
  3. 99. Leetcode 322. 零钱兑换 (动态规划-完全背包)
  4. Knapsack Cryptosystem【折半+查找】
  5. mysql的zip包的安装方法
  6. Open vswitch 之Qos rate-limiting 原理
  7. 未处理的超时和请求取消
  8. 企业大数据的主要竞争优势
  9. 【原】Storm调度器
  10. 手把手教你用Python操纵Word自动编写离职报告!
  11. 怎样用EXCEL对数值型字段进行分组?
  12. 【多目标优化】3. 基于分解的多目标进化算法 —(MOEA/D)
  13. 好好说话之64位格式化字符串漏洞
  14. 在报表开发工具Stimulsoft Report数据透视表的新功能介绍
  15. 微型计算机 2018 12月下,桌面CPU天梯图2018年12月最新版 十二月台式电脑处理器排名...
  16. 拼多多——多多的数字组合
  17. AndroidStudio写的个人信息修改界面
  18. 酷壳陈皓:如何学好C语言
  19. UNIAPP----仿淘宝详情页滚动
  20. 卸载“趋势科技防毒墙网络版客户机”方法之一

热门文章

  1. 疫情之下第一个倒闭航空公司:百年老店Avianca申请破产保护,国内民航也不乐观...
  2. MIT“人造肌肉”登上Science封面,能提起自重650倍的物体,伸缩10000次都不坏
  3. PyCharm有些库(函数)没有代码提示
  4. 途牛订单的服务化演进
  5. CentOS 7 程序自启动的问题
  6. Idea-LifecycleException when deploying
  7. adb 命令 (01)
  8. svn 代码管理工具
  9. Sencha Touch 动态修改store的url
  10. PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题