object

object

对象特性

  • 对象的原型(prototype)指向另外一个对象,本对象的属性继承来自它的原型对象
  • 对象的类(class)是一个标识对象类型的字符串
  • 对象的扩展标记(extensible flag)指明了在(es5中)是否可以向该对象添加新属性

三类js对象

  • 内置对象(native object)是由es规范定义的对象或类。例如:数组、函数、日期、和正则表达式
  • 宿主对象(host object)是由js解释器所嵌入的宿主环境(也可以当成内置对象)
    • HTMLElement对象
  • 自定义对象(user-defined object)是由运行中的js代码创建的对象

两类属性

  • 自由属性(own property)是直接在对象中定义的属性
  • 继承属性(inherited property)是在对象的原型对象中定义的属性

创建方式

  • 使用对象的直接量创建
// 用直接量创建的对象并没有prototype属性
var a = {};
  • 通过new的方式
// 创建一个空对象和使用对象直接量一样的
var a = new Object();
// 创建一个空数组,和[]一样
var a = new Array();
// 创建一个表示当前时间的Date对象
var a = new Date();
// 创建一个可以进行模式匹配的EegExp对象
var a = new RegExp('js');
  • Object.create()
/**
 * 
 * @param {*} 第一个参数这个对象的原型
 * @param {*} 第二个参数是用于对象的属性进一步描诉(可选的)
 */
Object.create()

对象的属性

  • object.property 点运算符 点后面的值是静态的
  • object[‘property’] 关联数组(散列、映射或字典) 方括号里面的字符串是动态的

属性特性

  • value:值
  • 可写(writable attribute):是否可以设置该属性的值
  • 可枚举(enumerable attribute):是否可以通过for/in循环返回该属性
  • 可配置(configurable attribute):是否可以删除或修改该属性
/**
 * 给某个对象的多个属性赋值属性的特性,如果这个属性没有则创建,如果有则修改
 * @param {*} 要在其上定义属性的对象
 * @param {*} 要定义或修改的属性的名称
 * @param {*} 将被定义或修改的属性描述符
 * @returns 被传递给函数的对象。
 */
let value = '';
// get set 方法都能被delete方法删除
Object.defineProperty(obj, "a", {
  get: function() {
    return value + 'a';
  },
  set: function(newValue) {
    value = newValue;
  },
  enumerable: true,
  configurable: true
});

检查属性

  • “x” in Obj // 返回的true或者false (继承属性也要检查出来)
  • obj.hasOwnPreperty("x") // 是否有自己的属性(检查测不出来继承属性)
  • obj.prepertyEnumerable ("x") // 是否有自己的属性并且可枚举的属性(不能检查出继承属性)

枚举属性

  • Object.getOwnPropertyNames(obj) // 返回的是对象自由的属性名字结合

属性的删除

  delete运算符只能删除自有属性;不能删除那些可配置性为false的属性

序列化对象

  对象与字符串相互之间的转换 ==> JSON.parse() <===> JSON.stringify();


  转载请注明: 迷一样的自信 object

 上一篇
es6对象的扩展 es6对象的扩展
es6对于对象的扩展 属性名的简洁表达式 const { a, b } = { a: 1, b: 2, c: 3 }; 属性表达式 const b = { aaa: 1, ["bbb"]: true }; 方法的na
2018-03-06
下一篇 
this this
this的理解定义  this的指向是再执行时才确定(最后谁调用this就指向谁),并不是创建时就确定的. example// 在非严格模式下并且在浏览器中 /** *1:在全局变量中this指代的是window对象 a:var =>
2018-02-11
  目录