56、课堂案例(面试题)
* 一道面试题
* 统计字符串中每个字符串出现的次数(以对象的形式存储)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
var key = str[i]
if(obj[key] === undefined) {
obj[key] = 1
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
var key = str[i]
if(obj[key] === undefined) {
obj[key] = 1
} else {
obj[key]++
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
if(!obj[str[i]]) {
obj[str[i]] = 1
} else {
obj[str[i]]++
}
}
console.log(obj)
var str = 'aaabbbccddeeeea'
var obj = {}
for(var i = 0; i <= str.length; i++) {
if(!obj[str[i]]) {
obj[str[i]] = 1
} else {
obj[str[i]]++
}
}
console.log(obj)
57、课后练习
* ①. 反转字符串
* var str = 'abcdef'
* 代码处理后的 str === fedcba
```js
// 方法1
var str = 'abcdef'
// var newStr = str.split('')
// var newStr2 = newStr.reverse()
// var newStr3 = newStr2.join('')
var newStr = str.split('').reverse().join('')
console.log(newStr3)
// 方法2
var newStr = ''
for(var i = 0
var s = str.charAt(str.length-i-1)
newStr += s
}
console.log(newStr)
```
* ②.查询字符串
JS 中内把字符串分为几种类型(约定)
1. 普通字符串: '123asd阿松大'
2. 数字字符串: '123123123123123'
3. html格式字符串: '<p></p>'
4. 查询字符串: 'key=value&key2=value2&key3=value3'
* 一条数据: key=value
* 多条数据: & 符间隔
假设 str 存储的是后端反馈给我们的一个信息
var str = 'username=靓仔&age=18&qq=88888888'
需求1:
将'username=靓仔&age=18&qq=88888888'
更改为
{
username: '靓仔',
age: 18,
qq: 88888888
}
需求2:
将
{
username: '靓仔',
age: 18,
qq: 88888888
}
更改为
'username=靓仔&age=18&qq=88888888'
```js
var str = 'username=靓仔&age=18&qq=88888888'
var obj = {}
var arr = str.split('&')
arr.forEach(function(item) {
var itemInfo = item.split('=')
obj[itemInfo[0]] = itemInfo[1]
})
console.log(obj)
var newStr = ''
for (var k in obj) {
newStr += k + '=' + obj[k] + '&'
}
console.log(newStr)
newStr = newStr.slice(0, -1)
console.log(newStr)
```
58、进制转换与保留小数
1.进制转换(了解)
1.1十进制转换为其他进制
语法:十进制数字.toSting(几进制)
var num = 100
var num1 = num.toString(2)
console.log(num1)
1.2其他进制转换为十进制
语法:parseInt(数字,将数字视为几进制的数字转换为10进制的数字)
var num = parseInt(100, 2)
console.log(num)
!2.保留小数(掌握)
语法:toFixed(保留几位小数), 保留小数的时候四舍五入,并且返回的是字符串
var num = 100.123456789
var num1 = num.toFixed(2)
console.log(num1)
var num2 = num.toFixed(4)
console.log(num2)
59、定时器
* 两种定时器的介绍
①.setInterval 计时器,每间隔固定的时间执行一次
* 语法:setInterval(函数, 数字/时间)
* 函数:每间隔固定的时间要执行的代码
* 数字:问隔的时问,注意单位是毫秒 ,最小值为4~20
```js
setInterval(function() {
console.log('我是一个定时器~~~')
}, 1000)
```
②.setTimeout 倒计时器,在指定时间到达后,执行一次
* 语法:setTimeout(函数, 数字)
* 函数:在指定时间到达后要执行的代码
* 数字:间隔时间,单位也是毫秒
```js
setTimeout(function() {
console.log('我是一个倒定时器~~~')
}, 3000)
```
* 两个定时器的返回值与意义
* + 返回值不区分定时器种类,用于表示你这个定时器是页面中第几个定时器
* + 作用:用来关闭定时器
```js
var timeId1 = setInterval(function() {
console.log('我是一个定时器~~~')
}, 1000)
var timeId2 = setTimeout(function() {
console.log('我是一个倒定时器~~~')
}, 3000)
console.log('计时器ID', timeId1)
console.log('倒计时器ID', timeId2)
```
* 关闭定时器
* + 不区分定时器种类,只要给出正确的定时器返回值就可以关闭
* + 语法:
* clearTimeout(定时器返回值)
* 注意:能够关闭计时器也能关闭倒计时器
* 开发人员的约定:这个定时器只用来关闭倒计时器
* 目的就是为了让其他开发人员看到这个行代码之后,知道你关闭了一个倒计时器
* clearInterval(定时器返回值)
* 注意:能够关闭计时器也能关闭倒计时器,
* 开发人员的约定:这个定时器只用来关闭计时器
* 目的就是为了让其他开发人员看到这个行代码之后,知道你关闭了一个计时器
* */
```js
var timeId1 = setInterval(function() {
console.log('我是一个定时器~~~')
}, 1000)
clearInterval(timeId1)
var timeId2 = setTimeout(function() {
console.log('我是一个倒定时器~~~')
}, 3000)
clearTimeout(timeId2)
```
60、异步代码
* 简单的代码异步执行机制(并不是详细的,详细的内容后期还会讲)
*
* 这是一道面试题,请熟读并背诵全文
*
* 什么是非异步代码
* 按照从上往下的顺序,从左到右的顺序,依次执行每一行代码
* 如果上一行代码没有执行完毕,不会执行下一行代码
*
* 什么是异步代码
* 当代码遇到异步任务的时候,会把这个代码放在'异步队列'内等待
* 所有的同步代码全都执行完毕之后,在开始执行“异步队列”内的代码
* 简单来说:代码在执行的时候如果遇到异步任务,会先放在‘异步队列’内等着,然后继续往下执行,直到把所有的同步代码执行完毕后,在开始执行异步任务
*
* 什么是异步任务
* 两种定时器都是异步任务
* 可以理解:先执行定时器外面的代码然后执行定时器里边的代码
```js
console.log('开始')
setTimeout(function() {
console.log('倒计时器执行了~~~')
}, 3000)
console.log('结束')
/**
* 运行顺序
* 1.开始
* 2.结束
* 3.倒计时器执行了~~~
* */
```
```js
console.log('1')
setTimeout(function() {
console.log('2')
}, 3000)
console.log('3')
setTimeout(function() {
console.log('4')
}, 4000)
console.log('5')
setTimeout(function() {
console.log('6')
}, 2000)
console.log('7')
// 执行顺序 1 3 5 7 6 2 4
```
61、创建时间对象
在Js中 Date 给我们提供了操作时间的一些方法,是JS内置的一个对象
var timer = new Date()
console.log(timer)
62、时间对象的参数
* 创建时间对象的时候,可以选择传递参数,也可以不传递参数
* 如果需要传递参数,分为两种方式
①.数字
* 最少要传递两个值,年 和 月(JS中0-11代表了1-12月)
```js
var timer = new Date(2020, 00, 31, 23, 59, 59)
console.log(timer)
```
②.字符串
* 最少只需要传递一个参数年份即可(字符串的形式传递时月份从1开始)
```js
var timer = new Date('2019-02-13 13:14:15')
console.log(timer)
```
63、获取时间对象
var timer = new Date()
①.得到时间对象中的年份
var year = timer.getFullYear()
console.log(year)
②.得到时间对象中的月份
var month = timer.getMonth()
console.log(month)
③.得到时间对象中的那一天/日
var day = timer.getDate()
console.log(day)
④.得到时间对象中的小时
var hours = timer.getHours()
console.log(hours)
⑤.得到时间对象中的分钟
var minutes = timer.getMinutes()
console.log(minutes)
⑥.得到时间对象中的秒
var seconds = timer.getSeconds()
console.log(seconds)
⑦.得到时间对象中的一周的第几天(用0-6表示周一到周日,但是周日为0)
var days = timer.getDay()
console.log(days)
⑧.getTime 按照格林威治时间计算 从1970年1月1日0时0分0秒 到 现在(或指定日期)的毫秒数
var getTime = timer.getTime()
console.log(getTime)
64、设置时间对象
var timer = new Date()
①设置 年
timer.setFullYear(2008)
console.log(timer.getFullYear())
②设置 月
timer.setMonth(11)
console.log(timer.getMonth())
③设置 当月的第几天
timer.setDate(20)
console.log(timer.getDate())
⑤注意:没有设置 本周的第几天
⑥设置 时
timer.setHours(16)
console.log(timer.getHours())
⑦设置分
timer.setMinutes(30)
console.log(timer.getMinutes())
⑧设置秒
timer.setSeconds(40)
console.log(timer.getSeconds())
⑨设置毫秒(0-999)
timer.setMilliseconds(888)
console.log(timer.getMilliseconds())
⑩直接设置到1970 的总毫秒
timer.setTime(123456789)
console.log(timer.getTime())
65、认识BOM
* BOM
* 浏览器对象模型,其实就是操作浏览器的一些能力
*
* 我们可以操作那些内容?
* +获取浏览器的相关信息(窗口大小)
* + 操作浏览器进行页面的跳转
* + 获取浏览器地址栏的信息
* + 操作浏览器的滚动条
* + 获取浏览器的版本
* + 让浏览器出现一个弹出框
* + ...
*
* BOM 的核心就是 window 对象
* window 是JS内置的一个对象,里面包含着操作浏览器的方法
66、体验BOM
* ①.获取浏览器窗口的尺寸
* innerHeight / innerWidth
* + 作用:获取浏览器窗口的高度和宽度(包含滚动条)
* + 语法:window.innerHeight / window.innerWidth
console.log('浏览器窗口的高度', window.innerHeight)
console.log('浏览器窗口的宽度', window.innerWidth)
* ②.浏览器的弹出框 (学习的时候会用,实际工作中不会使用)
* alert
* prompt
* confirm
* * 有一个询问信息和两个按钮
* * 点击确定按钮 返回 true
* * 点击取消按钮 返回 false
var boo = confirm('请问您确定进入页面吗?')
console.log(boo)