-
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
-
之前更新了JavaScript的类型,关于JavaScript的对象类型介绍的比较简单,本文详细的写一下我理解的JavaScript的对象类型。
对象类型(The Object Type)
- 对象就是属性的集合,属性分为数据属性和访问器属性。
- 对象是属性的索引结构。
数据属性
- 属性描述使用的都是
JavaScript的基本数据类型。 - 数据属性
- value:属性的值
- writeable:属性能否被复制
- enumerable:属性能否使用for in枚举
- configurable:属性能否被修改
- 通常用于定义的属性的代码会产生这些数据属性,通常
writeable、enumerable、configurable默认为true,可以通过内置函数Object.getOwnPropertyDescripter查看。
访问器属性
- 比如常见的:getter和setter
- 访问器属性
- getter:函数或undefined,在取属性值的时候被调用
- setter:函数或undefined,在设置属性值时被调用
- enumerable:属性能否被for in枚举
- configurable:属性能否被修改
- 访问器属性是属性在读写时候执行的代码,在读写同一属性的时候,可以得到不同的值。
- 如果要改变属性的值或者定义访问属性,可以通过
OBject.defineProperty实现
对象类型中的Number、String、Boolean
- 日常在使用时会混用,不过
3和new Number(3)是完全不同的值。 - 构造器是两用的。在使用new调用时,会生成对象。当直接调用时,会强制类型转换。
对象之间的比较
let a = {t:1}; let b = {t:1}; a===b //false
- 即使完全相同的两个对象,也并非同一个对象。
- 原因在于:对象的唯一表示是内存地址,所以,就算是属性都一样的对象,因为内存地址不同,所以不是不是同一个对象。
JavaScript的对象和其他语言对象的对比
c++(这里仅指c++本身,不牵扯c语言)c++的对象有成员变量和成员函数
JavaJava对象有属性和方法
- 所以对象有状态和行为(行为可能引起状态的变化)。
- JavaScript对象不区分状态和行为,把状态和行为都抽象为“属性”(property)。因为这种抽象,JavaScript的对象有更多自己的特点。
- 可以在运行时为对象添加/修改状态和行为
讨论:关于类和原型
- 在有了class语法后,不需要再模拟类,但是原型体系仍然存在于JavaScript中。
- 是否仍然有必要理解/了解原型?在有类之后,原型在JavaScript中是怎样的存在?
总结
- JavaScript的对象基本上就这些内容了,对于对象,有更多的不同的看法,欢迎留言讨论。