高程读后感(四)— 关于BOM本人容易忽略的知识点总结
window对象
window对象上属性及方法
- 全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。
原因:使用var声明的变量有一个[[Configurable]]的特性,值为false,因此不可以通过delete操作符删除。
var age = 18;
window.color = "red";
// 在IE < 9时抛出错误,在其他所有测览器中都返回 false
delete window.age; // false
// 在IE < 9时抛出错误,在其他所有测览器中都返回 true
delete window.color; // true
console.log(window.age); // 18
console.log(window.color); // undefined
- 访问未声明的变量会抛错,但是通过查询window对象,可以知道某个可能未声明的变量是否存在。
// oldValue未定义会抛错
var newValue = oldvalue
// 属性查询 不会抛错
var newValue = window.oldValue // newValue 的值是undefined
alert 方法要接收字符串格式的数据为参数,引用类型会默认调用
toString()方法,toLocaleString,toString,valueOf- 数组类型默认都会以逗号分隔,而valueOf方法在console.log时,稍微有点不同。打印的是该引用的类型的值,并非字符串,
- 对象类型alert则返回[object Object],console.log打印对应的对象的值
窗口关系及框架:如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中。在这个集合中,可以通过数值索引(从0开始,从左至右,从上到下)或者框架名称来访问相应的window对象。
window.frames[0];
window.frames["FrameName"];
top.frames[0];
top.frames["FrameName"]
frames[0];
frames["FrameName"];
超时调用setTimeout和间歇调用setInterval
JavaScrip是单线程语言。但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。
setTimeout()方法:在指定的时间过后执行代码。接受两个参数:要执行的代码和以毫秒表示的时间。
- 第一个参数可以是一个包含JavaScript代码的字符串,也可以是一代函数。虽然这两种调用方式都没有问题,但由于传递字符串可能导致性能损失。因此不建议以字符串作为第一个参数。
- 第二个参数是一个表示等待多长时间的毫秒数,但经过该时间后指定的代码不一定会执行。 JavaScript是一个单线程的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,就有一个JavaScript任务队列。这些任务会按照将它们添加到队列的顺序执行。
- 第二个参数就是告诉JavaScript再过多长时间把当前任务添加到队列中。如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行。
- 调用setTimeout之后,该方法会返回一个数值ID,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用 clearTimeout()方法并将相应的超时调用作为参数传递给它。
- 只要是在第二个参数指定的时间尚未过去之前调用clearTimeout(),就可以完全取消超时调用。
- 在使用超时调用时,没有必要跟踪超时调用,因为每次执行代码之后,如果不再设置另一次超时调用,调用就会自行停止。
- 超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向 window对象,在严格模式下是undefined。
==setInterval()方法:每隔指定的时间就执行一次代码,直至间歇调用被取消或者页面被卸载。接受的参数与setTimeout()相同。
- 调用setInterval之后,同样会返回一个间歇调用ID,可用于在将来某个时刻取消问歌询用。要取消尚未执行的间歌调用计划,可以调用 clearInterval()方法并将相应的间歌调用作为参数传递给它。
取消间歌调用的重要性要远远高于取消超时调用,因为在不加干涉的情况下,间歇调用将会一直执行到页面卸载。- 一般认为、使用超时调用来模拟间歇调用的是一种最住模式,在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。而使用超时调用,则完全可以避免因此最好不要使用间歌调用。
BOM
location对象及其位置操作
是最有用的BOM对象之一,提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。同事将URL解析为独立的片段。它既是window对象的属性也是 document对象的属性,
window.location == document.location,引用的是同一个对象。使用location对象可以通过很多方式来改变浏览器的位置。
// assign():传递一个URL,立即打开新URL并在浏览器的历史记录中生成一条记录
location.assign("http://www.baidu.com")
// 也会以该值调用assign()方法。与显式调用assign()方法的效果完全一样。
window.location = "http://www.baidu.com";
location.href = "http://www.baidu.com"; // 最常用
// 修改location对象的其他属性 改变当前加载的页面
// hash、search、hostname、pathname、port 设置为新值来改变URL
location.search = '#section1';
// 每次修改1ocation的属性(hash除外),页面都会以新URL重新加载。
location.search = '?id=1';
location.hostname = 'www.baidu.com';
location.pathname = 'game';
location.port = '8080';
通过上述任何一种方式修改URL后,浏览器的历史记录中就会生成一条新记录,因此用户通过单击“后退”按钮都会导航到前一个页面。
要禁用这种行为,可以使用
replace()方法。只接受一个参数,即要导航到的URL;结果就是虽然会导致浏览器位置改变,但不会在历史记录中生成新记灵。用户不能回到前一个页面。与位置有关的最后一个方法是
reload(),作用是重新加载当前显示的页面。如果调用时不传递参数,页面就会以最有效的方式重新加载(如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中重新加载)。如果要强制从服务器重新加载,则需要为该方法传递参数true。
// 重新加载(有可能从缓存中加载)
location.reload();
// 重新加载(从服务器重新加载)
location.reload(true);
位于reload()调用之后的代码会不会执行,这要取决于网络延迟或系统资源等因素,为此最好将reload()放在代码的最后一行。
history对象
该对象保存着用户上网的历史记录,每个浏览器窗口、每个标签页、每个框架,都有自己的history对象与特定的 window对象关联。出于安全方面的考虑,开发人员无法得知用户浏览过的URL。不过,借由用户访过的页面列表,可以在不知实际URL的情况下实现后退和前进。
go()方法可以在用户的历史记录中任意跳转。接受一个参数表示前进后退的页面数的一个整数值。负数表示“后退”,正数表示“前进” 。也可以传递一个字符串参数。浏览器会跳转到历史记录中包含字符串的第一个位置--可能后退,可能前进,具体要看哪个位置最近。若历史记录中不包含该字符串,那么这个方法什么也不做 。
可以使用两个简写方法
back()和forward()来代替go()。可模仿浏览器的“后退”和“前进”按钮。history对象还有一个length属性,保存着所有历史记录的数量。
// 一个整数值
history.go(-1); // 后退一页
history.go(1); // 前进一页
// 一个字符串参数
history.go("baidu.com"); // 跳转到最近的baidu.com页面
history.back(); // 后退一页
history.forward(); // 前进一页
if(history.length === 0){
// 用户打开窗口后的第一个页面
}
高程读后感(四)— 关于BOM本人容易忽略的知识点总结的更多相关文章
- Java Script基础(四) BOM模型
一.BOM模型 BOM模型(Browser Object Model),也称为文档对象模型,它包含浏览器相关的属性和方法,例如操作,前进后退按钮,控制地址栏,关闭浏览器窗口,打开新窗口等等.它包含的对 ...
- 读书时间《JavaScript高级程序设计》四:BOM,客户端检测
隔了一段时间,现在开始看第8章. 第8章:BOM BOM提供了很多对象,用于访问浏览器的功能.BOM的核心对象是window,它表示浏览器的一个实例. window对象是通过javascript访问浏 ...
- JS学习四(BOM DOM)
BOM Screen对象 console.log(window.width);//屏幕宽度 console.log(window.height);//屏幕高度 conso ...
- 前端基础(四):BOM和DOM
前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...
- Javascript基础 - js中曾经忽略的知识点
深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...
- Sqlserver中一直在用又经常被忽略的知识点一
已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...
- Python全栈开发记录_第四篇(集合、函数等知识点)
知识点1:深拷贝和浅拷贝 非拷贝(=赋值:数据完全共享,内存地址一样,修改一个另一个也变化) 浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)像[[1,2],3,4]如果修改列表中列 ...
- 【知了堂学习笔记】java 底层容易忽略的知识点
1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...
- 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型
本文讨论的背景是Linux环境下的network IO,同步IO和异步IO,阻塞IO和非阻塞IO分别是什么 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进 ...
- UITableView中容易忽略的知识点
1.取消余下的分割线 tableView.tableFooterView = UIView() 2.分割线顶格 override func viewDidLayoutSubviews() { self ...
随机推荐
- AIRIOT答疑第1期 | 零开发基础也能干物联网平台项目?
当然可以! 物联网低代码平台以零门槛.部署快.灵活性高.满足二次开发等特点,成为近两年来IOT服务的生力军.项目团队即使没有研发人员,也可以像拼乐高一样快速搭建物联网平台,功能全面,满足多数业务场景下 ...
- PaliGemma 正式发布 — Google 最新发布的前沿开放视觉语言模型
PaliGemma 是 Google 推出的新一代视觉语言模型家族,能够接收图像与文本输入并生成文本输出. Google 团队已推出三种类型的模型:预训练(PT)模型.混合模型和微调(FT)模型,这些 ...
- Dapper升级SqlSugar问题汇总
最近群里有个小伙伴把Dapper迁移SqlSugar几个不能解决的问题进行一个汇总,我正好写一篇文章来讲解一下 一.sql where in传参问题: SELECT * FROM users wher ...
- AI实战 | 手把手带你打造校园生活助手
大家好,我是努力的小雨.最近,我开始将我的经验逐渐分享到B站,希望能够帮助大家通过扣子助手真正解决一些问题.最近有粉丝提出了一个需求,为了满足大家的期待,我已经制作了视频,详细介绍了这个助手的搭建思路 ...
- go 有向简单图 十字链表
package main import "fmt" type CrossEdgeNode struct { tailVex int // 尾顶点 headVex int // 头顶 ...
- Android OpenMAX(六)OMXStore
在前面两节的学习中我们知道了OMX Core是用来管理(查询/创建/销毁)Android平台上的硬件编解码组件的.这一节我们再向上一层,Android平台除了提供有硬件编解码组件支持,还内置了一些软件 ...
- Android 13 - Media框架(6)- NuPlayer
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们通过 NuPlayerDriver 了解了 NuPlayer 的使用方式,这一节我们一起来学习 NuPlayer 的部分实现细节. ps: ...
- MQ的相关概念
MQ的相关概念 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下 ...
- 三大显卡厂商(Intel NVIDIA AMD)产品对硬件解码编码支持程度列表
三大显卡厂商(Intel NVIDIA AMD)产品对硬件解码编码支持程度列表 以下全部为重庆Debug原创博客园独发,资料收集不易,贵请珍惜,更新日期2023年6月8日 Intel GPU解码编码的 ...
- Linux扩展篇-shell编程(四)-shell条件判断
基本语法 格式一: test condition 格式二: [ condition ] 注意:1)condition前后要有空格.2)条件非空即为true,例如[ hello ]返回true,[ ]返 ...