一幅长文细学JavaScript(四)——BOM

文章目录

  • 4 JavaScript BOM
    • 4.1 BOM概述
        • 浏览器对象模型
    • 4.2 Window对象
      • 4.2.1 弹出框
        • 弹出框类型
      • 4.2.2 定时事件
        • 定时器概念
        • 操作定时器
      • 4.2.3 同步与异步
        • 单线程JS
        • 同步和异步
        • 开启多线程
        • 一个问题
        • 同步任务和异步任务
        • JS执行机制
    • 4.3 Location对象
      • 4.3.1 基本概念
        • Location对象
        • URL
        • URL格式组成
      • 4.3.2 常见属性
      • 4.3.3 常见方法
    • 4.4 navigator对象
      • 4.4.1 基本概念
      • 4.4.2 判断终端
    • 4.5 history对象
      • 4.5.1 基本概念
      • 4.5.2 常见方法

4 JavaScript BOM

4.1 BOM概述

浏览器对象模型

  • BOM也称为浏览器对象模型,它不存在官方标准。
  • 现代浏览器几乎实现了JS交互相同的方法和属性,因此它经常作为BOM的方法和属性被提到。

4.2 Window对象

4.2.1 弹出框

弹出框类型

弹出框类型说明示例返回值
警告框用户需要单击确定来继续window.alert(“sometext”)void
确认框用户需要单击确定或取消来继续执行window.confirm(“sometext”)true或false
提示框用户需要单击确定或取消来继续执行window.prompt(“sometext”,“defaultText”)输入值或NULL
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>window.addEventListener('load',function(){var btn1 = document.querySelector('.btn1');btn1.onclick = function(){alert("警告框");}var btn2 = document.querySelector('.btn2');btn2.onclick = function(){confirm("确认框");}var btn3 = document.querySelector('.btn3');btn3.onclick = function(){prompt("提示框");}})</script><button class = "btn1">测试按钮1</button><button class = "btn2">测试按钮2</button><button class = "btn3">测试按钮3</button>
</body>
</html>

4.2.2 定时事件

定时器概念

说明:window对象运行以指定的时间间隔执行代码,这些时间间隔称为定时事件


操作定时器

作用示例说明
开启定时器setInterval(函数,间隔时间)每隔一段时间调用函数,间隔时间为毫秒,一旦开启不会自动停止
清除定时器clearInterval(定时器变量)去除定时器
开启延时器setTimeout(函数,间隔时间)延迟一段时间后调用函数,间隔时间为毫秒,函数只执行一次
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 测试定时器开关 --><div id = "div1">测试内容1</div><button id = "btn1">测试按钮1——开始定时器</button><button id = "btn2">测试按钮2——结束定时器</button><!-- 测试延时器 --><div id = "div3">测试内容3</div><button id = "btn3">测试按钮3——开始延时器</button><script>/*-------------------测试定时器-------------------*/var btn1 = document.getElementById('btn1');var btn2 = document.getElementById('btn2');var div1 = document.getElementById('div1');var timer;//声明定时器对象var number = 0;//设置一个变量btn1.onclick = function(){timer = setInterval(function(){div1.innerText = number++;},1000)}btn2.onclick = function(){clearInterval(timer);}/*-------------------测试延时器-------------------*/var div3 = document.getElementById('div3');var btn3 = document.getElementById('btn3');btn3.onclick = function(){setTimeout(function(){div3.innerText = '测试内容3已经改变';},1000);}</script>
</body>
</html>

4.2.3 同步与异步

单线程JS

JS的一大特点就是单线程,也就是同一个时间只能做一件事。比如我们对某个DOM元素进行添加和删除操作,不能同时进行,应该先进行添加,之后再删除。


同步和异步

为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JS脚本创建多个线程,于是JS出现了同步和异步。

  • 同步:前一个任务结束后再执行后一个任务,程序的执行顺序和任务的排列顺序一致。
  • 异步:在做一件事时这件事会很费时,我们可以做这件事的同时去处理其他事。

开启多线程

开启多线程的方式是利用回调函数。

<script>console.log(1);setTimeout(function(){console.log(3);},3)console.log(2);</script>

一个问题

下面代码的输出结果仍然是1,2,3,这是为何?不是已经设置延时器的延时为0了吗。

<script>console.log(1);setTimeout(function(){console.log(3);},0)console.log(2);</script>

同步任务和异步任务

同步任务:同步任务都在主线程上执行,形成一个执行栈。

异步任务:JS的异步通过回调函数实现。异步任务相关的回调函数添加到任务队列(也叫消息队列)中。


JS执行机制

  1. JS的执行顺序如下:
  2. 先执行执行栈中的同步任务
  3. 异步任务放入任务队列中
  4. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进行执行栈,开始执行

4.3 Location对象

4.3.1 基本概念

Location对象

window对象给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL。因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象。


URL

统一资源定位符(Uniform Resource Locator,URL)是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。


URL格式组成

格式:protocol://host[:port]/path/[?query]#fragment

组成说明
protocol通信协议,常用的http,ftp,maito等
host主机(域名)
port端口号,可选,省略时使用方案的默认端口
path路径,一般用于表示主机上的一个目录或文件地址
query参数,以键值对的形式通过&符号分隔开
fragment片段,#后面内容常见于链接或锚点

4.3.2 常见属性

console.log(location);          //输出location对象
console.log(location.href);     //输出当前地址的全路径地址
console.log(location.origin);   //输出当前地址的来源
console.log(location.protocol); //输出当前地址的协议
console.log(location.hostname); //输出当前地址的主机名
console.log(location.host);     //输出当前地址的主机
console.log(location.port);     //输出当前地址的端口号
console.log(location.pathname); //输出当前地址的路径部分
console.log(location.search);   //输出当前地址的?后边的参数部分
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div{margin: 0 auto;background-color: pink;text-align: center;margin-top:40px;height: 100px;width: 300px;}</style>
</head>
<body><div>暂时找不到页面,五秒钟之后跳转到百度首页</div><script>var div = document.querySelector('div');window.setTimeout(function(){location.href = "https://www.baidu.com/";},3000)</script>
</body>
</html>

4.3.3 常见方法

location对象方法返回值
location.assign()和href一样可以跳转页面,也称为重定向页面
location.replace()替换当前页面,因为不记录历史,所以不能后退页面
location.reload()重新加载页面,相当于刷新按钮或者f5,如果参数为true,则强制刷新,相当于ctrl+f5
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>window.addEventListener("load",function(){var btn1 = document.querySelector('.btn1');var btn2 = document.querySelector('.btn2');var btn3 = document.querySelector('.btn3');btn1.onclick = function(){location.assign("https://www.baidu.com")}btn2.onclick = function(){location.replace("https://www.baidu.com")}btn3.onclick = function(){location.reload();}})</script><button class = "btn1">跳转页面</button><button class = "btn2">替换页面</button><button class = "btn3">刷新页面</button>
</body>
</html>

4.4 navigator对象

4.4.1 基本概念

navigator对象包含有关浏览器的信息,其有很多属性,最常用的是userAgent,该属性可以返回由客户机发送服务器的user-agent头部的值。


4.4.2 判断终端

下面的代码可以判断用户使用哪个终端打开页面,并实现跳转。

if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowerNG|WebOS|Symbian|Windows Phone)/i))){window.location.href = "";//手机
}else{window.location.href = "";//电脑
}

4.5 history对象

4.5.1 基本概念

window对象给我们提供一个history对象,与浏览器历史记录进行交互,该对象包含用户访问过的URL。


4.5.2 常见方法

history对象方法作用
back()后退功能
forward()前进功能
go(参数)前进后退功能,参数如果是1则前进一个页面,如果是-1则后退一个页面


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium RC 环境配置

在网上搜索了许久&#xff0c;没找到有具体的配置&#xff0c;只是简单了写了几个步骤&#xff0c;自己琢磨了一下&#xff0c;于是&#xff0c;就想整理一篇文章&#xff0c;便于以后温习。 本文是参照官网的步骤进行了&#xff0c;当然了&#xff0c;也不完成相同。在这里我要…

西安房产

http://xa.58.com/ershoufang/16421056735238x.shtml?PGTID14251184213960.09692851384170353&ClickID7 http://xa.58.com/ershoufang/20901882448136x.shtml?PGTID14251184213960.09692851384170353&ClickID13 转载于:https://www.cnblogs.com/learningJAVA/p/43060…

一幅长文细学GaussDB(二)——数据库基础知识

文章目录2 数据库基础知识2.1 数据库管理简介数据库管理数据库管理工作范围对象管理制定数据库对象命名规范备份和恢复灾难恢复备份方式数据库安装数据库卸载数据库迁移数据库扩容例行维护工作2.2 数据库重要概念数据库和数据库实例数据库连接和会话数据库连接池模式表空间表数…

hive如何处理not in和in的问题

2019独角兽企业重金招聘Python工程师标准>>> 首先我们先创建两个表和测试数据。建表语句如下&#xff1a; create table table1(uid STRING, dayTimes BIGINT) PARTITIONED BY (dt STRING); create table table2(uid STRING, monTimes BIGINT) PARTITIONED BY (dt S…

HDU 2072(单词数)题解

以防万一&#xff0c;题目原文和链接均附在文末。那么先是题目分析&#xff1a; 【一句话题意】 “就是统计一篇文章里不同单词的总数”&#xff08;已经是一句话了。。&#xff09; 【题目分析】 明显需要去重&#xff0c;上set&#xff0c;因为按行分析&#xff0c;又没有EOL…

摄影相关术语

摄影相关术语 gwj233 2018.2.14 对象(对焦)用光(光量,质,位,比,色)构图(平面,空间)。 0x01认识曝光 1、什么是摄影&#xff1a;以光线绘图&#xff0c;即通过物体反射的光线使感光介质曝光的过程。&#xff08;通过光来表现物体的形状体积结构质感颜色。&#xff09; 2、目标出…

一幅长文细学GaussDB(三)——SQL语法

文章目录3 SQL语法3.1 SQL语句概述SQL语句介绍SQL语句分类3.2 数据类型常用数据类型非常用数据类型3.3 系统函数概述数值计算函数字符处理函数时间日期函数类型转换函数系统信息函数3.4 操作符概述逻辑操作符比较操作符算术操作符测试操作符其他操作符3 SQL语法 华为GaussDB(f…

标签替换

$("br").replaceWith("<hr />") 遍历替换 $("#t_body td").each(function(){ var zhi$(this).html(); $(this).html(zhi.replace( ,)); }); }); var key"会" //替换的关键字 var strP eval("/"key"/g") …

从网络获取数据显示到TableViewCell容易犯的错

2019独角兽企业重金招聘Python工程师标准>>> 昨晚第一次做用网络接口获取的数据&#xff0c;显示到自己的cell上&#xff0c;犯了很多的错&#xff0c; 总结如下&#xff1b; 1.数据源数组必须首先初始化&#xff0c;一般使用的是懒加载&#xff1b; 2.异步获取网络…

第二学期-第一次作业

1-1. 计算两数的和与差 1.设计思路 第一步&#xff1a;设出被调用函数 op1, op2, *psum, *pdiff &#xff0c;利用被调函数计算*psum的值和*pdiff的值&#xff1b; 第二步&#xff1a;代入到主函数就是计算a、b的和与差&#xff1b; 第三部&#xff1a;对所得到数值进行输出&a…

一幅长文细学华为MRS大数据开发(三)——Hive

文章目录3 HIVE3.1 Hive概述Hive简介Hive应用场景Hive与传统数据仓库比较Hive优点3.2 Hive功能及架构Hive运行流程Hive数据存储模型Hive数据存储模型-分区和分桶Hive数据存储模型-托管表和外部表Hive支持的函数3.3 Hive基本操作Hive使用DDL操作DML操作DQL操作3 HIVE Apache Hi…

Huffman树进行编码和译码

//编码 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<queue> #include<fstream> #include<map> using namespace std;typedef struct HuffmanNode{int w;//节点…

更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数

更相减损法和辗转相除法&#xff08;GCD&#xff09;求最小公倍数和最大公约数 标签&#xff08;空格分隔&#xff09;&#xff1a; 算法 算法竞赛 这两种算法平时经常听到&#xff0c;听起来也很装逼&#xff0c;但是我老是忘了他们的原理&#xff0c;今天好好想想&#xff0c…

一幅长文细学JavaScript(五)——ES6-ES11新特性

5 ES版本 摘要 ES5的先天不足致使ES后续版本的发展&#xff0c;这也是前端人员绕不开的一个点。如果我们想要在工作和面试中轻松解决问题&#xff0c;那么了解ES6-ES11是必不可少的。 在本文中&#xff0c;我将采用一种更加通俗的方式来讲述这一块知识点&#xff0c;而不是照搬…

Python自动化运维工具fabric的安装

使用shell命令进行复杂的运维时&#xff0c;代码往往变得复杂难懂&#xff0c;而使用python脚本语言来编写运维程序&#xff0c;就相当于开发普通的应用一样&#xff0c;所以维护和扩展都比较简单&#xff0c;更重要的是python运维工具fabric能自动登录其他服务器进行各种操作&…

项目开发一些注意事项

项目开发一些注意事项 1、一些简单的方法可以让你的代码看起来更明了&#xff0c;如函数或者方法&#xff0c;尽量的写的小一些&#xff0c;如果太冗长&#xff0c;尝试抽出一块写成一个函数&#xff1b;2、如果业务逻辑比较复杂&#xff0c;判断选项较多&#xff0c;可以把判断…

一幅长文细学Vue(一)——Webpack打包工具

1 项目开发工具 摘要 ​ 在本文中&#xff0c;我们会详细讨论webpack是如何打包发布项目&#xff0c;不过对于Vue来说&#xff0c;Vite可以做到和webpack一样的功能。 声明&#xff1a;如果想要看懂此文章&#xff0c;需具备node.js中npm的知识。 作者&#xff1a;来自ArimaMis…

I00005 打印直角三角形字符图案

曾经的计算机&#xff0c;没有显示屏&#xff0c;人们操作计算机时&#xff0c;用打印机记录执行的操作命令。 后来有了显示屏&#xff0c;不过最初的显示屏是字符频幕&#xff0c;输出只能是字符。 即使是今日&#xff0c;计算机已经进入多窗口图形界面时代&#xff0c;有时程…

由于不能随便改路径,所以写在这里

export LD_LIBRARY_PATH/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATHexport PATH/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH/root/anaconda2/envs/LTproto261/lib export PYTHONPATH/dev/LT/SegNet/caffe-segnet/python:$PYTHONPATH转载于:https://www.cnblogs.com…

动态数组使用

1 #include<stdio.h>2 #include<stdlib.h>3 4 int main()5 {6 int i;7 int n; //用于记录输入的整数的个数 8 int *p; //用于指向动态数组的存储空间 9 int sum0,average; //用于记录输入的整数的和与平均值 10 11 scanf("%d"…