JavaScript 基本数据类型-对象
对象是 JavaScript 的基本数据类型,对象可以看做是属性的无序集合。对象不仅仅是字符串到值的映射,除了保持自身的属性,JavaScript 对象还可从一个称谓原型的对象中继承属性。对象的方法通常是继承的属性。这种“原型式继承”是 JavaScript 的核心特征。
对象的常见方法:
- 创建
create - 设置
set - 查找
query - 删除
delete - 检测
test - 枚举
enumerate
创建对象
对象字面量
创建对象最简单的方式就是使用对象字面量(直接量)
1 | var empty = {} |
对象字面量是一个表达式,每次运算都会创建并初始化一个新的对象。这就意味着,如果在一个重复调用的函数的循环内使用了对象字面量,它将创建很多对象,并且每次创建的对象的属性值都有可能不同。
通过 new 创建对象
new 运算符创建并初始化一个对象。new 后跟随一个函数调用,这个函数被称为构造函数(constructor),构造函数用以初始化一个新创建的对象。
JavaScript 的原始类型都包含内置构造函数,
1 | var o = new Object() |
原型
每一个 JavaScript 对象(null 除外)都和另一个对象相关联。
所有通过对象字面量创建的对象,原型都指向 Object.prototype (obj.__proto__ === Object.prototype),通过 new 关键字创建的对象,其原型就是构造函数的 prototype 属性的值。
Object.create()
ES6 中新增的方法,它创建一个新对象,其中第一个采纳数是这个对象原型。 Object.create() 提供第二个参数,用以对对象的属性进行进一步描述。
创建一个空对象,(例如和 {}、new Object() 一样) ,需要传入 Object.prototype
1 | var o3 = Object.create(Object.prototype) |
使用该方法,可以使得任意对象得以被继承,这是一个强大的特性。
属性的查询和设置
查询
可以通过 . 或者方括号 [](必须是一个计算结果为字符串的表达式) 运算符来获取属性的值。
属性访问错误
查询一个不存在属性并不会报错,会返回 undefined,但是如果对象不存在,那么使用查询这个不存对象的属性就会报错,null 和 undefined 都没有属性值,查询时均会报错。
利用 && 运算符的短路行为,可以解决这个问题。
1 | var len = book && book.subtitle && book.subtitle.length |
删除属性
delete 运算符可以删除对象属性,但是只能删除自身属性,不能删除继承属性。(要删除继承属性,必须要定义这个属性的原型对象上删除它,但这回影响到所有继承这个原型的对象)。
delete 不能删除可配置属性为 false 的属性。
检测属性
in运算符,如果对象自有属性或继承属性中包含这个属性则返回truejavascript var o = {x: 1} 'x' in o // true 'toString' in ohasOwnProperty(), 用来检测给定的名字是否是对象自有的属性,继承属性将返回falsejavascript o.hasOwnProperty('x') true o.hasOwnProperty('toString') falsepropertyIsEnumerable(),是hasOwnProperty()的增强版,检测自有属性并且该属性是可枚举的 - 通过代码增加的属性都是可枚举的,除非手动修改属性的可枚举性使用
!==判断 - 判断属性是否为undefined,可用于自有属性和继承属性 - 当属性值位undefined时,则这种方法失效
序列化对象
对象序列化是指将对象的状态转换成字符串,使用 JSON.stringify() 和 JSON.parse() 进行序列化和还原 JavaScript对 对象。