JavaScript学习第八天:对象
昨天说想要两更,不代表我真的会两更(嗯对)
主播还是不能太指望自己了。
目录
JavaScript 学习Day5
对象
声明语法
属性和访问
属性-查
属性-改
属性-增
属性-删(了解)
方法和调用
null
遍历对象
JavaScript 学习Day5
知道对象数据类型的特征,能够利用数组对象渲染页面
-
理解什么是对象,掌握定义对象的语法
-
掌握数学对象的使用
对象
对象是 JavaScript 数据类型的一种,之前已经学习了数值类型、字符串类型、布尔类型、undefined。对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。
对象(object)是JavaScript里的一种数据类型。可以理解为是一种无序的数据集合,注意数组是有序的数据集合。
对象可以用来描述某个事物,例如描述某个人
-
人有 姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能
-
如果用多个变量保存则比较散,用对象比较统一
比如:
let obj = {uname: 'pink老师'age: 18gender: '男'}
比如描述班主任的信息:
-
静态特征(姓名,年龄,身高,性别,爱好) -> 可以用数字,字符串,数组,布尔类型等来表示
-
动态行为(点名,唱歌,跳舞) -> 使用函数来表示
声明语法
声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。
两种声明方式:
// 方式一let 对象名 = {}// 方式二let 对象名 = new Object()
在开发中,我们更多使用方式一,其中{}是对象字面量。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JavaScript 基础 - 对象语法</title></head><body><script>// 声明字符串类型变量let str = 'hello world!'// 声明数值类型变量let num = 199// 声明对象类型变量,使用一对花括号// user 便是一个对象了,目前它是一个空对象let user = {}</script></body></html>
对象由属性和方法组成。
-
属性:信息或叫特征(名词)。比如手机尺寸、颜色、重量等
-
方法:功能或叫行为(动词)。比如手机打电话、发短信、玩游戏等
let 对象名 = {属性名: 属性值,方法名: 函数}
属性和访问
数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。
-
属性都是成 对出现的,包括属性名和值,它们之间使用英文
:分隔 -
多个属性之间使用英文
,分隔 -
属性就是依附在对象上的变量(外面是对象,对象内是属性)
-
属性名可以使用
""或'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JavaScript 基础 - 对象语法</title></head><body><script>// 通过对象描述一个人的数据信息// person 是一个对象,它包含了一个属性 name// 属性都是成对出现的,属性名 和 值,它们之间使用英文 : 分隔let person = {name: '小明', // 描述人的姓名age: 18, // 描述人的年龄stature: 185, // 描述人的身高gender: '男', // 描述人的性别}console.log(person)console.log(typeof person) // object</script></body></html>
在学习对象的使用时,和函数是一样的,操作数据无非就是那四个字:增 删 改 查。

属性-查
声明对象,并添加了若干属性后,可以使用 . 或 [] 获得对象中属性对应的值,我称之为属性访问。
语法:对象.属性 或 对象['属性']
其实在开发中,第二种方法会更常用。当我们的属性名有空格、中横线时,就必须得用第二种方法。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JavaScript 基础 - 对象语法</title></head><body><script>// 通过对象描述一个人的数据信息// person 是一个对象,它包含了一个属性 name// 属性都是成对出现的,属性名 和 值,它们之间使用英文 : 分隔let person = {name: '小明', // 描述人的姓名age: 18, // 描述人的年龄stature: 185, // 描述人的身高gender: '男', // 描述人的性别'student-num': 123456}// 访问人的名字console.log(person.name) // 结果为 小明// 访问人性别console.log(person.gender) // 结果为 男// 访问人的身高console.log(person['stature']) // 结果为 185// 或者console.log(person.stature) // 结果同为 185console.log(person['student-num']) // 结果为 123456</script></body></html>
属性-改
语法:对象名.属性 = 新值
let person = {name: '小明', // 描述人的姓名age: 18, // 描述人的年龄stature: 185, // 描述人的身高gender: '男', // 描述人的性别};person.gender = '女'console.log(person.gender) // 结果为女
属性-增
增动态为对象添加属性。动态添加与直接定义是一样的,只是语法上更灵活。
增和改语法相同,判断标准就是对象有没有这个属性,没有就是新增,有就是改。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JavaScript 基础 - 对象语法</title></head><body><script>// 声明一个空的对象(没有任何属性)let user = {}// 动态追加属性user.name = '小明'user['age'] = 18// 动态添加与直接定义是一样的,只是语法上更灵活</script></body></html>
属性-删(了解)
开发中很少做删的操作,因此仅作了解即可。
语法:delete 对象名.属性
let person = {name: '小明', // 描述人的姓名age: 18, // 描述人的年龄stature: 185, // 描述人的身高gender: '男', // 描述人的性别
}delete person.stature
console.log(person)
方法和调用
数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。在对象外的函数叫函数,在对象内的函数叫方法。
-
方法是由方法名和函数两部分构成,它们之间使用 : 分隔
-
多个属性之间使用英文
,分隔 -
方法是依附在对象中的函数
-
方法名可以使用
""或'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基础 - 对象方法</title>
</head>
<body><script>// 方法是依附在对象上的函数let person = {name: '小红',age: 18,// 方法是由方法名和函数两部分构成,它们之间使用 : 分隔singing: function () {console.log('两只老虎,两只老虎,跑的快,跑的快...')},run: function () {console.log('我跑的非常快...')}}</script>
</body>
</html>
声明对象,并添加了若干方法后,可以使用 . 或 [] 调用对象中函数,我称之为方法调用。
语法:对象.方法()
我们常见的有document.write()
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基础 - 对象方法</title>
</head>
<body><script>// 方法是依附在对象上的函数let person = {name: '小红',age: 18,// 方法是由方法名和函数两部分构成,它们之间使用 : 分隔singing: function () {console.log('两只老虎,两只老虎,跑的快,跑的快...')},run: function () {console.log('我跑的非常快...')}}// 调用对象中 singing 方法person.singing()// 调用对象中的 run 方法person.run()</script>
</body>
</html>
方法也是有形参和实参的,使用方式和函数相同:
let person = {name: '小红',age: 18,sum: function (x, y) {console.log(x + y)}
}
// 方法调用
person.sum(1, 2)
// 注意 如果在方法调用外再套一层打印 结果会是 undefined
console.log(person.sum(1, 2)) // undefined
// 因为没有给方法sum一个返回值 因此只能返回一个未知数
也可以动态为对象添加方法,动态添加与直接定义是一样的,只是语法上更灵活。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基础 - 对象方法</title>
</head>
<body><script>// 声明一个空的对象(没有任何属性,也没有任何方法)let user = {}// 动态追加属性user.name = '小明'user.['age'] = 18// 动态添加方法user.move = function () {console.log('移动一点距离...')}</script>
</body>
</html>
注:无论是属性或是方法,同一个对象中出现名称一样的,后面的会覆盖前面的。
null
null 也是 JavaScript 中数据类型的一种,通常只用它来表示不存在的对象。使用 typeof 检测类型它的类型时,结果为 object。
遍历对象
for遍历对象的问题:
-
对象没有像数组一样的length属性,所以无法确定长度
-
对象里是无序的键值对,没有规律,不像数组里面有规律的下标
因此我们需要一个新的for-in语法来实现遍历对象:
let obj = {uname: 'pink'
}
for (let k in obj) {console.log(k) // k 是对象里的属性名 字符串类型 'uname'console.log(obj.k) // undefined 因为对象里没有 k 这个属性 相当于 console.log(obj.'uname')console.log(obj[k]) // pink 属性值 相当于 console.log(obj['uname'])
}
for in 不提倡遍历数组 因为 k 是字符串类型。
for in 语法中的 k 是一个变量,在循环的过程中依次代表对象的属性名
由于 k 是变量,所以必须使用[]语法解析
总之一定要记住:k 是获得对象的属性名,对象名[k]是获得属性值。
如果我们在数组中放置对象呢?我们应该如何得到对象里的某一属性的值。
let arr = [{ name: '张三', age: 18, sex: '男'},{ name: '李四', age: 19, sex: '男'},{ name: '王五', age: 20, sex: '男'}
]
// 遍历数组对象
for (let i = 0; i < arr.length; i++) {console.log(arr[i].name) // 张三 李四 王五console.log(arr[i].age)console.log(arr[i].sex)
}
可以看到和上面的for-in不太一样,因为是for循环,其中arr[i]相当于每一个对象,因此想要查看对象的属性值,只需要通过语法对象.属性名。
