JavaScript中的对象属于是引用类型的数据,是一种数据类型
对象:是一组属性和方法的集合
一部手机:属性有颜色、品牌、屏幕尺寸、内存大小、CPU,方法有播放视频、听音乐、办公、聊天...
一辆汽车:属性有颜色、空间大小、品牌、燃料类型,方法有代步、拉货...
万物皆对象
1.JS中的对象
自定义对象:用户创建的对象
内置(ES)对象:JS标准规范中提供的对象
宿主对象:运行在不同的环境下,根据运行环境划分
2.自定义对象
(1) 对象字面量
var phone = { 属性名1: 属性值1, '属性名2': 属性值2,... }
属性名的引号可以省略,如果含有特殊字符必须添加引号。
练习:创建一个员工对象,包含的属性有编号、姓名、性别、生日、所属部门编号
var emp = {eid: 1,ename: 'Yu',sex: '女',birthday: '1991年5月4日','dept-id': 30
}
练习:创建一个商品对象,包含的属性有编号、标题、封面图、价格、库存量
var product = {pid: 1,title: '戴尔DELL灵越游匣15PR',img: 'img/dell.jpg',price: 5999,stock: 800
}
(2)内置构造函数
通过new关键字调用的函数就是构造函数
var car = new Object()
// 需要单独添加属性
car.color = '黑色'
3.访问属性
对象.属性名
对象['属性名']
如果属性名不存在,获取的属性值为undefined
练习:创建一本图书对象,包含的属性有编号、书名、作者、价格;修改图书的价格,添加图书的出版社、出版日期,打印输出图书的作者。
var book = {id: 9787115335500,title: '深入浅出Node.js',author: '朴灵',price: 51.4
}
// 修改价格
book.price = 48.5
// 添加属性
book.publish = '人民邮电出版社'
book['ptime'] = '2013-12-1'
console.log(book.author)
console.log(book)
4.遍历(枚举)属性
采用循环的方式,依次访问对象中的每个属性
for(var k in 对象) {k 每次访问到的属性名对象[k] 属性名对应的属性值 }
练习:创建一个成绩对象,包含多门成绩,遍历属性访问到每个成绩,计算出总分和平均分。
var score = {chinese: 84,math: 92,english: 78,history: 90
}
// 遍历属性
// 声明变量,用于保存总分
var sum = 0
// 声明变量,用于保存数量
var count = 0
for(var k in score) {// score[k] 每一个分数// console.log(k, score[k])// 把每一个分数加到sumsum += score[k]// 数量加1count++
}
console.log(sum, count, sum/count)
5.检测属性是否存在
对象.属性名 === undefined // true -> 不存在 false -> 存在 对象.hasOwnProperty('属性名') // true -> 存在 false -> 不存在 '属性名' in 对象 // true -> 存在 false -> 不存在
练习:创建一个商品对象,包含的属性有编号、标题、价格,如果库存量不存在,添加库存量属性,设置属性值为100;如果价格属性存在的话,对价打8折;最后打印对象
var product = {pid: 2,title: '小米13',price: 4200
}
// 判断属性不存在
// product.stock === undefined
// !product.hasOwnProperty('stock')
if(!('stock' in product)) {product.stock = 100
}
// 判断属性存在
if(product.hasOwnProperty('price')) {// 打8折product.price *= 0.8
}
console.log(product)