重学前端-学习笔记-JavaScript对象
说明
重学前端是程劭非(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对象相关推荐
- 重学前端学习笔记(八)--JavaScript中的原型和类
笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...
- 重学前端学习笔记(三十六)--Flex 布局
笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...
- 重学前端学习笔记(二十二)--选择器的机制
笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...
- 重学前端学习笔记(十三)--浏览器工作解析(三)
笔记说明 重学前端是程劭非(winter)[前手机淘宝前端负责人]在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专 ...
- 重学前端学习笔记(五)-JavaScript原型
JavaScript原型 中文中有个成语叫做"照猫画虎",这里的猫看起来就是虎的原型. 最为成功的流派是使用"类"的方式来描述对象,这诞生了诸如 C++.Jav ...
- 前端学习笔记——JavaScript进阶
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.JavaScript 面向对象 1. 面向对象编程介绍 1.1 两大编程思想 1.2 面向过程编程 1.3 面向对 ...
- [前端学习笔记]JavaScript基础知识
一.JS三种书写位置 行内式 直接写到元素的内部. <input type="button" value="唐伯虎" onclick="aler ...
- Web前端学习笔记——JavaScript之数组、函数、作用域
数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String.我们想存储班级中所有学生的姓名,此时该如何存储? 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按 ...
- Web前端学习笔记——JavaScript之WEBAPI、BOM、DOM及获取页面元素
Web API介绍 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访 ...
最新文章
- ARKit从入门到精通-ARKit工作原理及流程介绍
- 人工智能应用于建筑领域新前沿
- 99. Leetcode 322. 零钱兑换 (动态规划-完全背包)
- Knapsack Cryptosystem【折半+查找】
- mysql的zip包的安装方法
- Open vswitch 之Qos rate-limiting 原理
- 未处理的超时和请求取消
- 企业大数据的主要竞争优势
- 【原】Storm调度器
- 手把手教你用Python操纵Word自动编写离职报告!
- 怎样用EXCEL对数值型字段进行分组?
- 【多目标优化】3. 基于分解的多目标进化算法 —(MOEA/D)
- 好好说话之64位格式化字符串漏洞
- 在报表开发工具Stimulsoft Report数据透视表的新功能介绍
- 微型计算机 2018 12月下,桌面CPU天梯图2018年12月最新版 十二月台式电脑处理器排名...
- 拼多多——多多的数字组合
- AndroidStudio写的个人信息修改界面
- 酷壳陈皓:如何学好C语言
- UNIAPP----仿淘宝详情页滚动
- 卸载“趋势科技防毒墙网络版客户机”方法之一
热门文章
- 疫情之下第一个倒闭航空公司:百年老店Avianca申请破产保护,国内民航也不乐观...
- MIT“人造肌肉”登上Science封面,能提起自重650倍的物体,伸缩10000次都不坏
- PyCharm有些库(函数)没有代码提示
- 途牛订单的服务化演进
- CentOS 7 程序自启动的问题
- Idea-LifecycleException when deploying
- adb 命令 (01)
- svn 代码管理工具
- Sencha Touch 动态修改store的url
- PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题