Window是浏览器内置的全局对象(也叫顶级对象),我们学习的所有Webapi知识都是基于Window对象实现的。 DOM BOM都是属于window对象
在任何位置都可以使用window这个对象,可以省略不写

JavaScript 内置的,用来让代码延迟执行的函数,叫 setTimeout。
语法:
setTimeout(函数, 延时时间)
注意: setTimeout 仅仅只执行一次,平时省略window
清除延时函数
let timerId = setTimeout(fn , 1000)
clearTimeout(timerId)JavaScript 是单线程 编程语言,就是说,同一个时间只能做一件事。
但是, 单线程就意味着,所有任务都需要排队挨个来执行,前一个任务结束,才能轮到后一个任务的执行, 但如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。
为了解决这一问题,JS将任务分为两类:同步任务和异步任务

// 输出结果是 1 3 2
console.log(1)
setTimeout(function () {
console.log(2) // 同步任务
}, 1000) // 异步任务
console.log(3) // 同步任务
// 修改之后的输出结果 1 3 2
console.log(1) // 同步任务
setTimeout(function () {
console.log(2)
}, 0) // 异步任务
console.log(3) // 同步任务比如常见的异步任务:
注册事件setTimeout setIntervalAjax图示

地址栏有关
保存了url地址的各个组成部分
console.log(location.href)location.href = 值
location.href = 'http://www.baidu.com'// search 属性 获取查询字符串 (符号 ?后面部分)
console.log(location.search)
// hash 属性 获取哈希值 (符号 # 后面部分)
console.log(location.hash)
// reload 方法 刷新页面
let btn = document.querySelector('#btn')
btn.addEventListener('click', function () {
location.reload()
})记录了浏览器自身的相关信息
检测浏览器的版本以及平台
(function () {
const userAgent = navigator.userAgent
// 验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
if (android || iphone) {
// 如果是Android或iPhone,则跳转至移动站点
location.href = 'https://m.jd.com/' // 移动端京东站点
}
})()与浏览器地址栏的操作相对应,如前进、后退、历史记录等
history对象方法 | 作用 |
|---|---|
back() | 后退功能 |
forward() | 前进功能 |
go(参数) | 参数是1,前进一个页面;参数是-1,后退一个页面 |
在开发中用的较少,因为浏览器自带前进后退。
比如说搜索的历史记录
1、数据存储在用户浏览器中 2、页面刷新不丢失数据 3、容量较大, 约 5M 左右
localStorage.setItem(key, value)
例如:
// 语法: localStorage.setItem('键', '值')
localStorage.setItem('ha' , '哈哈哈')
localStorage.getItem(key)例如:
// 语法: localStorage.getItem('键')
console.log(localStorage.getItem('ha'))
localStorage.removeItem(key)例如:
// 语法: localStorage.removeItem('键')
localStorage.removeItem('ha')
复杂数据类型(object,array等)存储: 本地只能存储字符串, 无法存储复杂数据类型。(如果存储复杂数据类型,数据会丢失)
例如:
let obj = {
uname: '老王',
age: 38,
skill: '翻墙',
house: '内蒙海景房'
}
// 说明:本地存储只适合存字符串,不能直接将复杂数据类型进行本地存储
// 错误写法
localStorage.setItem('data' , 'obj')
需要将复杂数据类型转换成JSON字符串,在存储到本地
1.JSON.stringify(复杂数据类型)
// 存:
// 1. 先把复杂数据进行转换成JSON字符串
// 2. 之后本地存储JSON字符串
localStorage.setItem('data' , JSON.stringify(obj))
JSON.parse(JSON字符串)如果没有存储数据,那么取出时显示为null
// 取:
// 1. 先取出本地存储的JSON字符串
// 2. 在将JSON字符串解析成JS的复杂数据
// 存的是JSON字符串,取出来的也是字符串
console.log(localStorage.getItem('data'))
// 所以需要JSON解析为复杂数据类型
console.log(JSON.parse(localStorage.getItem('data')))
固有属性
标签自带的属性
自定义属性
程序员自定义的属性
便于在标签上存储数据
规范做法:建议使用data-* 来表示自定义属性
通过dataset来操作
// 自定义属性规范推荐的做法
// 说明:建议使用data-* 来表示自定义属性
// 在JS操作的时候,通过 dataset来进行操作
console.log(box.dataset)
console.log(box.dataset.num)
console.log(box.dataset.demo)