对象数据类型Object
普通对象 {} Object 类数组、实例、原型对象……
数组对象 [] Array
正则对象 // RegExp
日期对象 Date
Set / Map
……
普通对象
定义:对象是由零到多组键值对(属性名和属性值)组成的
属性名(键)不是变量名,也不是变量,它是对象的一个属性(特征);
属性名一般都是一个字符串类型的,下面的例子中的name,可以写成name,也可以写为"name",当然也可以是数字或者Symbol等基本类型的值
属性名不能是对象或者函数(不能是引用数据类型),如果对象或者函数作为属性名,会把其转换为字符串作为属性名
例:var x={};
var y={age:11,0:100}
[Symbol('AA')]:200, //对于Symbol类型的属性名,需要基于[]包裹起来,保证语法的正确性
[{xx:"xxx"}]:300,
//属性名如果是对象,那么该对象最后会变为字符串,({xx:"xxx"}).toString()->"{object Object}"
}
获取一个对象中某个属性名对应的属性值,这种方式被称为: “对象的成员访问”
对象.属性名
这种方式不适用于数字或Symbol的类型名,这样的情况只能基于对象[属性名]来访问
对象[属性名]
这种方式必须指定好属性的类型 obj[name]和obj["name"]代表的不是一个情况。
例:var obj={0:100}
console.log(obj.0) //语法错误:Uncaught SyntaxError: missing ) after argument list
console.log(obj[0]) //100
console.log(obj.age) //undefined 访问对象的某个成员,如果当前的成员不存在,不会报错,返回undefined
console.log(a) //如果是访问一个不存在的变量,则会报错 z is not defined
obj[name]和obj["name"]代表的不是一个情况
例:var x=10;
var obj={
x:"lili",
10:100,
}
console.log(obj.x) lili 访问当前对象属性名是x对应的属性值"lili"
console.log(obj["x"]) lili和上面的操作一个意思
console.log(obj[x]) 100 首先获取x变量存储的值,把存储的值作为属性名,进行对象的成员访问 obj[10] -> 100
obj["值"],直接是对象的成员访问
obj[变量],首先获取变量值,然后把变量值作为属性名,再进行成员访问
console.log([x]) [10]
console.log(x) 10
"x"、'x'是字符串类型的值
x 它不是值,它是一个变量,代表存储的10
对象的属性名和变量没有关系,不是一个东西
对象的属性名也是各种的类型的值:字符串、数字、Symbol……
变量只是一个名字,没有所谓的类型,只是用来存储值的
对象的属性名(特征)也是具体的值,存储的结果是对当前特征的描述
管理一个对象的成员
直接编写在{}大括号当中,对于Symbol或者对象类型的属性名,以及需要把一个变量存储的值作为属性名,都需要基于中括号[]包裹起来,保证语法的正确性。
var symb=Symbol("AA");
var obj={
name:"珠峰培训",
0:100,
symb:"AAA", //这样处理,属性名就是"symb",而不是这个变量存储的值
[symb]:"AAA" //这样处理,属性名是Symbol("AA"),等同于把变量存储的值作为属性名
}
console.log(obj)
基于JS动态管理成员(新增/修改/删除)
对象的成员是不允许重复的:0和"0"或者true和"true" null和"null"是按照相同的成员处理的,在动态管控的时候,如果之前有这个成员,则是修改成员的属性值,没有这个成员,才是给新增这个成员
var symb=Symbol("AA")
var obj={
name:"lili",
0:100,
}
新增obj.age=11;
obj["age"]=11
修改obj["symb"]="xxx" symb="xxx"
obj[symb]="xxx" Symbol("AA")="xxx
obj["name"]=123 name:123
删除
假删除:利用访问对象一个不存在的成员,返回undefined或null的特征,我们把某个成员的值修改为undefined或null,以后再获取这个成员,结果也是undefined或null,我们可以认为当前成员是不存在的,但本质还是存在的,称为假删除。
例:obj.name=null
obj.name=undefined
真删除:彻底从对象中移除这个成员
例:delete obj["name"];
特殊对象
数组或者类数组对象(集合)
属性名(成员 / 键)是数字,而且数字从零开始,逐级递增,有顺序和规律的数字属性名,被称为“索引”,用来记录每一项的位置信息
有一个length成员,存储集合的长度(个数)
通过数组或类数组 [索引] 进行成员访问以及相关的操作
数组 => 它是Array类的实例,用 [] 包裹
例 var arr=[10,20,30];
console.log(arr)
console.log(arr[1]) 20
console.log(arr[arr.length-1]) 30
console.log(arr.length-1) 2
类数组(类似于数组,但不是数组) 不是Array的实例,虽然结构类似,但是不能直接使用数组的方法。
例:var obj={
0:10,
1:20,
2:30,
length:3
}
console.log(obj)