对象

1.对象定义方式
2.类型

对象定义方式

  • 文字语法形式:(现实中用的比较多)
var myobj = {  key : value  };
  • 构造形式
var myobj = new Object();
myobj.key = value;

数据类型

js中有6种数据类型:string 、boolean、 number 、null、 undefined 、object

内置对象

九大内置对象

  • String
  • Array
  • Number
  • Boolean
  • Object
  • Function
  • Date
  • RegExp
  • Error

对象内容

var myobj = {  key : value  };
  • 属性访问: mobj.key = value;

  • 键访问: myobj[“key”] = value;

以上两种语法的区别在于,“.” 操作符要求属性名满足标识符的命名规范,而“[ ]” 可以接受任意的UTF-8/unicode 字符串作为属性名;

注意:在对象中,属性名永远是字符串,即使你用的是 string 字面量以外的其他值作为属性名,它也会首先被转换为一个字符串;

(1) ES6可计算的属性名

var a = "foo";
var myobj = {
[a+"lala"] : " hello ";
}
myobj["foolala"] //  hello

(2)数组

var arr = [1,3,5,8];
arr.a = "hello";
arr.length ; // 4 ,数组的长度不会因为又添加了一个命名属性而改变
arr.a ; //  hello
  1. 数组只能使用整数作为数组元素的索引,使用非整数并通过括号或 “.” 来访问或设置数组元素时,所操作的并不是数组列表中的元素,而是数组对象的属性集合上的变量,数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命名属性。

  2. 把数组比喻为箱子,箱子可以有内容,箱子本身也有它的重量、长宽等,内容是数组列表,箱子长度是数组对象的属性

(3) 属性描述符

  • 从 ES5 开始,所有的属性都有了属性描述符

  • 在创建普通属性时,属性描述符会使用默认值,我们也可以通过 Object.defineProperty(object,property,{ ….}) 方法来对属性的特性进行设置,可以通过 Object.getOwnPropertyDescriptor(object,property) .

  • 需要注意的属性描述符有 writable 、 configurable 、enumerable

writable : false :表示属性不可改变,相当于定义了一个空的 setter 操作;

configurable : false : 表示属性不可配置,包括禁止删除该属性、属性值等,但是可以把其他属性的 true 改为 false, 不能把 false 改为 true

enumerable: false :表示属性不可枚举,是控制属性能否出现在对象的属性枚举中

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor

(4)存在性

var  obj = { a : 2 };

("a" in obj );  // true
obj.hasOwnProperty("a");// true
  • in 操作符,会检查属性是否在对象及其原型链中,而且检查的是某个属性名是否存在,例如 4 in [1,3,4] ;返回的结果 false,因为数组的属性名其实是 0 ,1, 2

  • hasOwnProperty() 只会检查属性是否在 obj 对象中,不会检查原型链;、

(5)可枚举

可枚举 相当于 “可以出现在对象属性的遍历中”

  • 可以通过 defineProperty()设置可枚举的属性

  • Object.keys(obj) 会返回一个数组,包含obj 对象中的所有可枚举的属性

  • Object.getOwnPropertyNames(obj) 会返回一个数组,包含对象的所有属性

(6)for .. of 循环

for of 循环,首先会向被访问对象请求一个迭代器对象,然后通过调用迭代器对象的 next() 方法来遍历所有返回值,数组有内置的 @@iterator ,因此 for..of 可以直接应用在数组上,普通对象没有内置这个迭代器,当然如果想要用 for .. of 循环遍历对象,也可以给对象显示添加迭代器进行循环。

你可能感兴趣的:(对象)