对象数据类型的详细解读

对象数据类型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)

你可能感兴趣的:(对象数据类型的详细解读)