JavaScript高级数据类型之对象

简介: 入关于JavaScript到底是不是面向对象的编程语言,目前其实争议还挺大。许多保守的人会说JavaScript是一种基于对象的语言,而不说是面向对象的语言。但不管怎么样,对于前端开发者、工程师而言,可能没必要区分得如此清楚,对这类重视工程能力的语言“使用者”而言,只需要知道——


引入


关于JavaScript到底是不是面向对象的编程语言,目前其实争议还挺大。许多保守的人会说JavaScript是一种基于对象的语言,而不说是面向对象的语言。

但不管怎么样,对于前端开发者、工程师而言,可能没必要区分得如此清楚,对这类重视工程能力的语言“使用者”而言,只需要知道——

JavaScript拥有对象这一数据类型,

没有类却可以用构造器做出类能做的事

今天我们就来了解一下JS的对象数据类型,包括

描述

访问

修改

检查


1. 描述对象


JavaScript的对象其实可以理解成是一种无序的集合数据类型,有键值对:

var juejin = {
    name: '掘金酱',
    ifgood: True,
    birth: 2020,
    height: 1.70,
    weight: 55,
    score: null
};

如上代码块。JavaScript用一个{}括住一个个键值对,以此来表示一个对象。

键值对以xxx: xxx形式申明,用,隔开。

注意:

键不需要加“”,键很像是一个变量名,值则要区分数据类型,是字符串的话少不了加“”

最后一个键值对不需要在末尾加,,如果加了,有的低版本浏览器将报错。


2. 访问


上面代码块描述了一个juejin对象,申明了一个name属性,值是'掘金酱'ifgood属性是布尔值True,birth属性,值是2020,以及其他一些属性。(掘金仿真人总得有身高体重吧)。

最后,把这个对象赋值给变量juejin后,就可以通过变量juejin来获取小明的属性了:

juejin.name; // '掘金酱'
juejin.birth; // 2020

Question:之前提到的“键(即我们的属性名)像是变量名”,且此处访问属性也是采用.+属性名来完成的。那这个属性名的命名规则一定要按照变量名命名规则来吗?


Answer:当然不是,你只需要给属性名加上引号就行了:


var juejin = {
    name: '掘金酱',
    'good?': 'yes!'
};


但是访问的时候也不能用.来访问,需要用中括号来访问:


xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小红'
xiaohong.name; // '小红'

我们发现正常的变量名做属性时也可以用[]来访问。


3. 修改


JavaScript的对象是动态类型,我们可以自由地给一个对象添加或删除属性:

var zhangwei = {
    name: '张伟'
};
zhangwei.age; // undefined
zhangwei.age = 18; // 新增一个age属性
zhangwei.age; // 18
delete zhangwei.age; // 删除age属性
zhangwei.age; // undefined
delete zhangwei['name']; // 删除name属性
zhangwei.name; // undefined
delete zhangwei.school; // 删除一个不存在的school属性也不会报错


4. 检查


如果我们要检测zhangwei是否拥有某一属性,可以用in操作来获取结果:

'name' in zhangwei; // true
'homeland' in zhangwei; // false


值得注意的是,如果in判断出一个属性存在,有可能这个属性是对象继承得到的:


'toString' in zhangwei; // true


toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

因此如果我们需要判断一个属性是否是对象自身拥有的,就可以使用hasOwnProperty()方法(这个名字可谓非常形象了)


var zhangwei = {
    name: '张伟'
};
zhangwei.hasOwnProperty('name'); // true
zhangwei.hasOwnProperty('toString'); // false



相关文章
|
6天前
|
JavaScript 前端开发
JavaScript Date(日期) 对象
JavaScript Date(日期) 对象
17 2
|
5天前
|
JavaScript 前端开发
JavaScript Math(算数) 对象
JavaScript Math(算数) 对象
13 4
|
4天前
|
Web App开发 JavaScript 前端开发
JavaScript Window - 浏览器对象模型
JavaScript Window - 浏览器对象模型
13 2
|
5天前
|
JavaScript 前端开发
JavaScript RegExp 对象
JavaScript RegExp 对象
15 3
|
5天前
|
JavaScript 前端开发
JavaScript Boolean(布尔) 对象
JavaScript Boolean(布尔) 对象
10 3
|
6天前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
14 3
|
6天前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
13 3
|
8天前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
19 3
|
11天前
|
存储 JavaScript 前端开发
JavaScript Number 对象
JavaScript Number 对象
18 0
|
11天前
|
JavaScript 前端开发
JavaScript prototype(原型对象)
JavaScript prototype(原型对象)
18 0