JavaScript中的对象属于是引用类型的数据,是一种数据类型
对象:是一组属性和方法的集合
一部手机:属性有颜色、品牌、屏幕尺寸、内存大小、CPU,方法有播放视频、听音乐、办公、聊天...
一辆汽车:属性有颜色、空间大小、品牌、燃料类型,方法有代步、拉货...
万物皆对象
自定义对象:用户创建的对象
内置(ES)对象:JS标准规范中提供的对象
宿主对象:运行在不同的环境下,根据运行环境划分
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
}
通过new关键字调用的函数就是构造函数
var car = new Object()
// 需要单独添加属性
car.color = '黑色'
对象.属性名
对象['属性名']
如果属性名不存在,获取的属性值为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)
采用循环的方式,依次访问对象中的每个属性
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])
// 把每一个分数加到sum
sum += score[k]
// 数量加1
count++
}
console.log(sum, count, sum/count)
对象.属性名 === 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)