对象

作者: 后发而先制 | 来源:发表于2017-07-25 14:52 被阅读0次

对象可以通过两种形式定义:声明(文字)形式和构造形式。

var myObj = { 文字形式。

key: value

// ...

};

var myObj = new Object(); 构造形式。

myObj.key = value;

构造形式和文字形式生成的对象是一样的。唯一的区别是,在文字声明中你可以添加多个键 / 值对,但是在构造形式中你必须逐个添加属性。

内容

var myObject = {

a: 2

};

myObject.a; // 2  属性访问

myObject["a"]; // 2  键访问

这两种语法的主要区别在于 . 操作符要求属性名满足标识符的命名规范,而 [".."] 语法可以接受任意 UTF-8/Unicode 字符串作为属性名。举例来说,如果要引用名称为 "SuperFun!"的属性,那就必须使用 ["Super-Fun!"] 语法访问,因为 Super-Fun! 并不是一个有效的标识符属性名。

对象中属性永远是字符串  字面量 。NUMBER OBJECT都不例外。会给转为STRING。数组是数字。区分对象和数组。

可计算属性名

   健访问派上用场了!

   ES6 增加了可计算属性名,可以在文字形式中使用 [] 包裹一个表达式来当作属性名:

   例如:

var prefix = "foo";

var myObject = {

[prefix + "bar"]:"hello",

[prefix + "baz"]: "world"

};

myObject["foobar"]; // hello

myObject["foobaz"]; // world

属性与方法

       属性是个函数,开发者喜欢叫为方法。

数组

复制对象

属性描述符

var myObject = {

a:2

};

Object.getOwnPropertyDescriptor( myObject, "a" );

// {

// value: 2,

// writable: true,

// enumerable: true,

// configurable: true

// }

writable(可写)、enumerable(可枚举)和 configurable(可配置)。

  1. Writable

   writable 决定是否可以修改属性的值。

   writable: false, // 不可写! 对对象的属性修改就无效。

  2. Configurable

  只要属性是可配置的,就可以使用 defineProperty(..) 方法来修改属性描述符:

  configurable:false

  把 writable 的状态由 true 改为 false,但是无法由 false 改为 true。

  除了无法修改,configurable:false 还会禁止删除这个属性:

  3. Enumerable

  从名字就可以看出,这个描述符控制的是属性是否会出现在对象的属性枚举中,比如说

  for..in 循环。如果把 enumerable 设置成 false,这个属性就不会出现在枚举中,虽然仍

  然可以正常访问它。相对地,设置成 true 就会让它出现在枚举中。

   用户定义的所有的普通属性默认都是 enumerable,这通常就是你想要的。但是如果你不希

   望某些特殊属性出现在枚举中,那就把它设置成 enumerable:false。

  对象常量

  结合 writable:false 和 configurable:false 就可以创建一个真正的常量属性(不可修改、重定义或者删除):

  禁止扩展

  Object.preventExtensions(..)

  密封

 Object.seal(..) 会创建一个“密封”的对象,这个方法实际上会在一个现有对象上调用

 Object.preventExtensions(..) 并把所有现有属性标记为 configurable:false。

 所以,密封之后不仅不能添加新属性,也不能重新配置或者删除任何现有属性(虽然可以

 修改属性的值)。

   冻结

  Object.freeze(..) 会创建一个冻结对象,这个方法实际上会在一个现有对象上调用Object.seal(..) 并把所有“数据访问”属性标记为 writable:false,     这样就无法修改它们的值。

 Getter和Setter

相关文章

网友评论

      本文标题:对象

      本文链接:https://www.haomeiwen.com/subject/xwwbkxtx.html