一、对象(object)
1.1 对象是什么?
- 对象(object):JavaScript里的一种数据类型
- 可以理解为是一种无序的数据集合
- 用来描述某个事物,例如描述一个人
- 人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能
- 如果用多个变量保存则比较散,用对象比较统一
- 比如描述 一个人的 信息:
- 静态特征 (姓名, 年龄, 身高, 性别, 爱好) => 可以使用数字, 字符串, 数组, 布尔类型等表示
- 动态行为 (点名, 唱, 跳, rap) => 使用函数表示
1.2.1 对象的声明
<script>
let student = {}
console.log(student)
</script>
1.2.2-利用new Object创建对象
<script>
// 利用 new Object 创建对象
let obj = new Object()
obj.uname = '张三疯'
obj.age = 18
obj.sex = '男'
obj.sayHi = function() {
console.log('hi~')
}
// (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
// (2) 每个属性和方法之间用 分号结束
console.log(obj.uname)
console.log(obj['sex'])
obj.sayHi()
</script>
1.3 对象成员的添加
<script>
let student = {
gender: '男',
subject: '前端',
name: 'hsu_ee',
age: 18,
corder: function() {
console.log('我会写代码')
},
debug: function() {
console.log('我会调bug')
}
}
console.log(student)
</script>
1.4 对象的属性值的获取-点语法
<script>
let student = {
gender: '男',
subject: '前端',
name: '李东',
age: 18,
corder: function() {
console.log('我会写代码')
},
debug: function() {
console.log('我会调bug')
}
}
console.log('学员的姓名是:', student.name)
console.log('学员的学科是:', student.subject)
student.corder()
student.debug()
</script>
1.5 对象的属性值的获取-[]方式
<script>
let student = {
name: 'xu_ee',
age: 18,
corder: function() {
console.log('我会写代码')
}
}
console.log('我的的姓名是:', student['name'])
student['corder']()
let propName = prompt('请输入你想获取的属性名称')
</script>
1.6-对象的属性值的获取-[]方式-2
<script>
let student = {
name: 'xuee',
age: 18,
corder: function() {
console.log('我会写代码')
}
}
let propName = prompt('请输入你想获取的属性名称')
console.log('你想要的属性值是:', student.propName)
console.log('你想要的属性值是:', student['propName'])
console.log('你想要的属性值是:', student[propName])
</script>
1.7-对象的行为--方法
<script>
let student = {
name: 'jack',
say: function() {
console.log(456)
}
}
student.say()
student['say']()
</script>
1.8-对象操作--修改和新增
<script>
let student = {
name: 'jack',
say: function() {
console.log(456)
}
}
console.log(student)
student.name = 'rose'
console.log(student)
student.age = 20
console.log(student)
student['gender'] = '男'
console.log(student)
</script>
1.9-对象操作-属性删除
<script>
let student = {
name: 'jack',
say: function() {
console.log(456)
}
}
console.log(student)
delete student.say
delete student.name
delete student.age
console.log(student)
</script>
1.10-对象的使用-案例
<script>
let str = 'aasdfasdfasfasdfasdfasdfdfhjgh'
let obj = {}
for (let i = 0; i < str.length; i++) {
let key = str[i]
if (obj[key]) {
obj[key] += 1
}
else{
obj[key] = 1
}
}
console.log(obj)
</script>
1.11-对象的遍历(for...in)
<script>
let student = {
gender: '男',
subject: '前端',
name: 'xuee',
age: 18,
debug: function() {
console.log('我会调bug')
}
}
for (let key in student) {
console.log(key, student[key])
}
</script>
1.12-学生信息的渲染
<script>
let students = [ { name: '小明', age: 18, gender: '男', hometown: '河北省' }, { name: '小红', age: 19, gender: '女', hometown: '河南省' }, { name: '小刚', age: 17, gender: '男', hometown: '山西省' }, { name: '小丽', age: 18, gender: '女', hometown: '山东省' } ]
// 拼接前面的网页结构
let htmlStr = `<table border="1" width="500px">
<thead>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>家乡</th>
</thead>
<tbody>`
// 遍历数组,拼接相应的静态结构
for (let i = 0; i < students.length; i++) {
htmlStr += `<tr>
<th>${i + 1}</th>
<th>${students[i].name}</th>
<th>${students[i].age}</th>
<th>${students[i].gender}</th>
<th>${students[i].hometown}</th>
</tr>`
}
// 拼接后面的网页结构
htmlStr += `</tbody>
</table>`
document.write(htmlStr)
</script>

二、内置对象Math
1.1-Math对象的基本使用
<script>
let num = 1.1
console.log(Math.ceil(num));
let num2 = 1.9
console.log(Math.floor(num2))
console.log(Math.max(1, 234, 325, 4, 645, 6747, 568))
console.log(Math.max(...[1, 234, 325, 4, 645, 6747, 568]))
console.log(Math.min(1, 234, 325, 4, 645, 6747, 568))
console.log(Math.pow(2, 10))
console.log(Math.abs(-100))
</script>
1.2-random函数生成随机数
<script>
console.log(Math.random())
console.log(Math.floor(Math.random() * 11))
let arr = ['张三', '李四', '王五', '赵六']
let index = parseInt(Math.random() * arr.length)
document.write(arr[index])
</script>
1.3-生成指定范围的随机数
<script>
</script>
1.4-随机点名优化
<body>
<button>单击点名</button>
<script>
let names = ['赵云', '黄忠', '关羽', '张飞', '马超', '刘备', '曹操']
let btn = document.querySelector('button')
btn.addEventListener('click', function() {
let index = parseInt(Math.random() * names.length)
console.log(names[index])
names.splice(index, 1)
if (names.length == 0) {
btn.disabled = true
}
})
</script>
</body>
1.5-猜数字游戏
<script>
let index = parseInt(Math.random() * 10) + 1
while (1) {
let num = +prompt('请输入一个1-10的值')
if (num > index) {
alert('大了,继续')
} else if (num < index) {
alert('小了,继续')
} else {
alert('真棒,干饭')
break
}
}
</script>
1.6-值类型数据作为变量赋值时的特点
<script>
let num = 20
console.log(num)
function updateValue(temp) {
temp = 40
}
updateValue(num)
console.log(num)
</script>
1.7-引用类型数据做为变量赋值时的特点
<script>
let obj = {
name: 'jack',
age: 20
}
console.log(obj)
function updateValue(temp) {
temp.name = 'rose'
temp.age = 18
console.log(temp === obj)
}
updateValue(obj)
console.log(obj)
</script>
三、构造函数
1.1-为什么需要构造函数
- 我们为什么需要使用构造函数:因为我们前面两种创建对象的方式一次只能创建一个对象
- 因为我们一次创建一个对象,里面很多的属性和方法是大量相同的,我们只能复制
- 因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为 构造函数
- 又因为这个函数不一样,里面封装的不是普通代码,而是 对象
- 构造函数 就是把我们对象里面一些相同的属性和方法抽象出来封装导函数里面