在JavaScript中,有7种数据类型:string、number、bool、symbol(ES6新增)、undefined、null和object,其中object 是唯一的复杂类型,需要认真理解。
对象
什么是对象,用一个现实的例子来说明:有一辆汽车出现在我们的面前,我们如何描述它呢?我们会说,这辆汽车的品牌,汽车的型号,汽车的颜色,汽车的载客人数,汽车的耗油量等等。 这些具体的描述我们认为就是一辆汽车的属性,那么回到JavaScript,我们用代码表达就是:
let car ={
color:"red",
make:"byd",
year:2020,
passengers:2,
}
这就是JavaScript 的对象,将属性名和属性值组合在一起,形成一个数据的集合。
创建对象
有两种方法,第一种:
let car ={
color:"red",
make:"byd",
year:2020,
passengers:2,
}
使用一个变量声明,再使用一对花括号将属性名和属性值包裹起来。
第二种:
let car = new Object({
color:'red',
make:"byd",
year:2020,
passengers:2
})
使用new 操作符创建一个对象
对象的原型
当我们创建一个对象之后,却发现能使用一个我们没有定义过的属性或者方法,这些属性和方法怎么来的? 这就是一个对象的隐藏属性,它指向着共有属性组成的对象的地址,这个共有属性组成的对象就叫做原型
没有定义过toString 却能使用它
原因是
car.__proto__指向了Object.prototype对象的地址,里面就有toString 方法
删除属性
要删除属性,可以使用关键字delete。
delete car.year
注意,删除属性时,不仅删除了属性的值,还删除了属性本身。删除成功后,再次查看car.year时,将返回undefined。
但是也有人直接设置car.year = undefined来删除属性,这种做法只是删除了值,属性本身在存在。
可以使用"year"in car === false,来判定属性本身删除了没有
查看所有的属性
当定义好一个对象时,以下几个方法查看所有属性:
- 查看自身定义的属性
- 查看自身定义的+原型上的属性
还有一个办法可以判断一个属性是自身定义的还是原型上共有的:
要注意下面2个方法的区别:
"toString" in car是无法判断该属性名是自身的还是原型上面的
查看单个属性
- 句点语法
- 中括号语法
注意,中括号里面的属性名需要加引号
修改或增加对象的属性
修改或增加自身的属性很简单,直接使用句号语法或者中括号语法即可
还可以修改原型上面的属性,不过不建议这么做,会引起很多问题