JS要点整理-9

130 阅读6分钟

BOM

浏览器对象模型(由浏览器赋予我们的能力)

  • 核心:页面中的一个对象 window
  • 书写方法:window.XXXX XXXX
  • 我们所有的全局变量(函数以外的地方声明变量) 和 全局函数(函数以外的地方声明的函数)全都存放在 window 对象中
  • console.log(window)

获取浏览器窗口的尺寸

  • innerHeight 和 innerWidth
    • 作用: 获取浏览器窗口的高度和宽度(包含滚动条)
    • 语法: window.innerHeight; window.innerWidth

浏览器的弹出层

  • prompt 用户输入框
    • 会有一个返回值, 就是用户输入的内容, 永远是字符串格式
  • alert 弹出框
    • 弹出框会中断(暂停)程序的运行, 直到关闭弹出框
  • confirm 用户询问框
    • 会有一个返回值, 如果点确定返回true, 否则返回 false
        //用户输入框
        var a = prompt()
        console.log(a);

        //弹出框
        console.log('开始');
        alert('弹出框1')
        console.log('继续');
        alert('弹出框2')
        console.log('结尾');

        //用户询问框
        var b = confirm()
        console.log(b); 

浏览器的地址信息

  • 在 window 中 有一个对象叫做 location, 他是专门用来存储浏览器地址栏内的信息
  • console.log(location)

location.href

  • location.href 专门存储浏览器地址栏内 url 地址的信息
  • 语法: var url = window.location.href
  • 我们也可以给这个属性赋值, 这样就会跳转到我们复制的地址了

location.reload

  • location.reload 会重新加载页面, 相当于刷新
  • 注意: 不要写在全局内, 否则浏览器会一直刷新
    • window.location.reload()

浏览器的历史记录

  • 在window 中有一个对象叫做 history 他是专门用来存储历史记录信息
  • console.log(history);

history.back

  • history.back 用来回退历史纪录的, 就是回到前一个页面, 相当于浏览器左上角的 ← 按钮
  • 注意: 我们需要有上一条记录, 不然就一直在这个页面 不会回退
  • window.history.back()

history.forward

  • 去到下一个历史记录里面, 也就是去到下一个页面, 就相当于 浏览器左上角的 → 按钮
  • 注意: 前提是我们之前有过回退操作, 不然的话我们现在就是在最后一个页面, 没有下一个
  • window.history.forward()

浏览器的版本信息

  • window 中的 navigator 可以获取到浏览器的信息
  • window.navigator

浏览器的延迟加载事件

  • window.onload = function () {}
  • 在以前开发的时候, 我们会将 所有的 JS 代码, 全都放在这个函数中运行,因为在这个函数中运行的时候, 可以保证页面所有的资源已经加载完毕了, 比如 标签, 图片
  • 如果把 JS 写在 body 底部, 则写不写 onload 都一样

浏览器的滚动事件

  • window.onscroll = function () {}
  • 当浏览器的滚动条滚动时会触发该事件, 或者鼠标滚轮滚动时触发

浏览器的滚动距离

  • 浏览器的内容可以滚动, 那么我们就可以获取到浏览器滚动的距离
  • 滚动事件发生的时候, 浏览器的位置一直没变, 而是 浏览器内的页面发生了滚动
  • 所以不再是使用 window 对象了, 而是使用 document 对象
  • 获取页面向上滚动的距离
    • 两种方式
      • document.body.scrollTop
      • document.documentElement.scrollTop
  • 获取页面向左滚动的距离
    • 两种方式
      • document.body.scrollLeft
      • document.documentElement.scrollLeft
        onscroll = function () {
            console.log('body', document.body.scrollTop);
            console.log('documentElement', document.documentElement.scrollTop);
        }
  • 区别
    • IE 浏览器(了解)
      • 没有 DOCTYPE 声明的时候, 用这两个都行
      • DOCTYPE 声明的时候, 只能用 document.documentElement.scrollTop
    • Chorme 和 FireFox
      • 没有 DOCTYPE 声明的时候, 用 document.body.scrollTop
      • DOCTYPE 声明的时候, 用 document.documentElement.scrollTop
    • Safari
      • 两个都不用, 使用一个单独的方法 window.pageYOffset

浏览器的本地存储

localStorage

  • 把一些常用的信息存储在 用户的电脑本地(存储在浏览器中),存储之后不手动删除, 那么永远存在
  • 在存储的时候, 只能存储基本数据类型中的字符串,如果需要存储其他数据类型, 需要借助 JSON 提供的方法
  • 可以实现跨页面通讯
  • 方法:
    • 增: 实现一个本地存储
      • window.localStorage.setItem('key', 'value')
      • JSON.stringify() 会将传入的数据转换成 JSON 格式的字符串, 然后存储到本地存储中
    • 查: 获取之前存储到本地的一些数据
      • window.localStorage.getItem('key')
      • 返回值: 查询到返回对应的数据, 否则返回 null
      • JSON.parse() 能够将传入的 JSON 格式的字符串还原成原本的数据类型, 原本是数组就还原为数组, 原本是对象就还原为对象
    • 删: window.localStorage.removeItem('key')
    • 清空: window.localStorage.clear()
        //增
        localStorage.setItem('id', '9528')
        localStorage.setItem('arr', JSON.stringify([1, 2, 3, 4, 5]))
        localStorage.setItem('obj', JSON.stringify({name : 1, sex : 0}))

        //查,没有返回Null
        console.log(localStorage.getItem('id'));
        console.log(JSON.parse(localStorage.getItem('arr')));
        console.log(JSON.parse(localStorage.getItem('obj')));

        //删一行
        localStorage.removeItem('id')

        //删全部
        // localStorage.clear()

sessionStorage

  • 浏览器的本地存储, 临时存储, 关闭浏览器以后, 存储内容自动消失
  • 想要跨页面通讯, 必须是从本页面跳转的才可以
        // 增
        window.sessionStorage.setItem('wx1', '123456')

        // 查   没有    --->    返回 Null
        var wx = window.sessionStorage.getItem('wx')
        console.log(wx)

        // 删除
        // window.sessionStorage.removeItem('wx')

        // 清空
        // window.sessionStorage.clear()

cookie

  1. 只能存储字符串, 有固定格式
  • key=value; key2=value2; key3=value3
  1. 存储大小有限制
  • 4KB左右
  1. 存储有时效性
  • 默认是会话级别(sessionStorage)时效, 但是可以手动设置过期时间
  1. 操作必须依赖服务器
  • 本地打开的也页面时不能操作 cookie
  • 要求页面必须在服务器打开
  1. 跟随前后端请求自动携带
  • 只要 cookie 空间中有内容的时候
  • 会在该页面和后端交互的过程中自动携带
  1. 前后端操作
  • 前端可以使用 JS 来操作
  • 任意一个后端语言都可以操作
  1. 存储依赖域名
  • 哪一个域名存储, 那一个域名使用
  • 不能跨域名通讯
// 设置 cookie
document.cookie = 'a=100'

// 设置一条带有过期时间的 cookie
var time = new Date()
document.cookie = 'a=100;expires=' + time

// 设置一条 30s 以后过期的 cookie
        /**
         *  因为我们的当前时间是按照东八区的时间执行的,
         *  比世界标准时间快 8 小时, 所以设置过期时间的时候需要将是将往回调8小时
        */
var time = new Date()
time.setTime(time.getTime() - 1000 * 60 * 60 * 8 + 1000 * 30)
document.cookie = 'a=100;expires=' + time

// 获取 cookie
document.cookie

本地存储的区别

  1. 出现时间
    • cookie: 有 JS 就有了
    • storage: H5 出现后才有
  2. 存储大小
    • cookie: 4k 左右
    • storage: 4mb-20mb 左右
  3. 前后端交互
    • cookie: 会随着当前页面的请求自动携带
    • storage: 不会跟随请求自动携带, 除非手动携带
  4. 前后端操作
    • cookie: 前后端语言都可以操作
    • storage: 只能前端 JS 操作
  5. 过期时间
    • cookie: 默认是会话, 可以手动设置过期时间
    • storage: 不能手动设置,没有过期时间
  • localStorage 和 sessionStorage 的区别
    • 过期时间
      • localStorage: 持久化存储, 除非手动清除
      • sessionStorage: 临时存储
    • 跨页面通讯
      • localStorage: 直接跨页面通讯
      • sessionStorage: 只能是当前窗口跳转的页面才可以通讯
    • 共同点
      • 只能存储字符串, 不能存储复杂数据类型
      • 存储其他数据类型的时候, 需要借助 JSON 的方法进行一个转换,获取回来的也是 字符串类型