window对象

window对象上属性及方法

  1. 全局变量不能通过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
  1. 访问未声明的变量会抛错,但是通过查询window对象,可以知道某个可能未声明的变量是否存在。
// oldValue未定义会抛错
var newValue = oldvalue
// 属性查询 不会抛错
var newValue = window.oldValue // newValue 的值是undefined
  1. alert 方法要接收字符串格式的数据为参数,引用类型会默认调用toString()方法,toLocaleString,toString,valueOf

    • 数组类型默认都会以逗号分隔,而valueOf方法在console.log时,稍微有点不同。打印的是该引用的类型的值,并非字符串,
    • 对象类型alert则返回[object Object],console.log打印对应的对象的值
  2. 窗口关系及框架:如果页面中包含框架,则每个框架都拥有自己的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对象及其位置操作

  1. 是最有用的BOM对象之一,提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。同事将URL解析为独立的片段。它既是window对象的属性也是 document对象的属性,window.location == document.location,引用的是同一个对象。

  2. 使用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';
  1. 通过上述任何一种方式修改URL后,浏览器的历史记录中就会生成一条新记录,因此用户通过单击“后退”按钮都会导航到前一个页面。

  2. 要禁用这种行为,可以使用replace()方法。只接受一个参数,即要导航到的URL;结果就是虽然会导致浏览器位置改变,但不会在历史记录中生成新记灵。用户不能回到前一个页面。

  3. 与位置有关的最后一个方法是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本人容易忽略的知识点总结的更多相关文章

  1. Java Script基础(四) BOM模型

    一.BOM模型 BOM模型(Browser Object Model),也称为文档对象模型,它包含浏览器相关的属性和方法,例如操作,前进后退按钮,控制地址栏,关闭浏览器窗口,打开新窗口等等.它包含的对 ...

  2. 读书时间《JavaScript高级程序设计》四:BOM,客户端检测

    隔了一段时间,现在开始看第8章. 第8章:BOM BOM提供了很多对象,用于访问浏览器的功能.BOM的核心对象是window,它表示浏览器的一个实例. window对象是通过javascript访问浏 ...

  3. JS学习四(BOM DOM)

    BOM                Screen对象 console.log(window.width);//屏幕宽度 console.log(window.height);//屏幕高度 conso ...

  4. 前端基础(四):BOM和DOM

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  5. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

  6. Sqlserver中一直在用又经常被忽略的知识点一

    已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...

  7. Python全栈开发记录_第四篇(集合、函数等知识点)

    知识点1:深拷贝和浅拷贝 非拷贝(=赋值:数据完全共享,内存地址一样,修改一个另一个也变化) 浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)像[[1,2],3,4]如果修改列表中列 ...

  8. 【知了堂学习笔记】java 底层容易忽略的知识点

    1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...

  9. 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型

    本文讨论的背景是Linux环境下的network IO,同步IO和异步IO,阻塞IO和非阻塞IO分别是什么 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进 ...

  10. UITableView中容易忽略的知识点

    1.取消余下的分割线 tableView.tableFooterView = UIView() 2.分割线顶格 override func viewDidLayoutSubviews() { self ...

随机推荐

  1. AIRIOT物联网低代码平台如何配置http客户端?

    AIRIOT物联网低代码平台一直保持和市场脉搏同频,支持市面上95%以上驱动,驱动能力夯实,大大满足任意数据采集需求.AIRIOT支持分布式部署,数据采集能力强,解决海量数据采集一台服务器采集困难的问 ...

  2. 如此丝滑的API设计,用起来真香

    分享是最有效的学习方式. 博客:https://blog.ktdaddy.com/ 故事 工位上,小猫一边撸着代码,一边吐槽着前人设计的接口. 如下: "我艹,货架模型明明和商品SKU模型是 ...

  3. StackExchange.Redis跑起来,为什么这么溜?

    StackExchange.Redis 是一个高性能的 Redis 客户端库,主要用于 .NET 环境下与 Redis 服务器进行通信,大名鼎鼎的stackoverflow 网站就使用它.它使用异步编 ...

  4. 在 Inno Setup iss 打包过程 中检测 .NET 6 / .net 5 / .NET Core 运行环境是否存在或已安装

    为了将 .NET 5 / .NET Core 应用程序部署到客户机,我们可以编写 Inno Setup 代码来判断客户机是否安装了必要的运行环境..NET 官方仓库 中提供了一个名为 NetCoreC ...

  5. 001. git基础

    目录 1. 持续集成教程 1.1 持续集成的基础概念 1.2 持续集成的一般流程 1.3 认识DevOps 1.3.1 DevOps是啥? 1.3.2 为什么需要DevOps呢? 1.3.3 DevO ...

  6. cmake之find_library使用问题

    附上工程源码 demo工程 PS:这个工程用于导出库 CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(demo LANGUAGES ...

  7. 【深度学习】c++部署onnx模型(Yolov5、PP-HumanSeg、GoogLeNet、UNet)

    这两天部署了好多模型,记录一下.代码链接. onnxruntime在第一张图的推理上比opencv快很多,但在后面的图上略微慢了一点. 不同的模型的部署时的输出不同,处理时需要对输出比较了解,下面分别 ...

  8. react mock数据

    为什么要做假数据,因为后端开发接口没有哪么快,此时就需要自己来模拟请求数据. 模拟的数据字段,需要和后端工程师沟通. 创建所需数据的json文件 json-server 此命令可以帮助我们快速创建一个 ...

  9. v-once指令 v-if和v-show

    v-once指令 只渲染元素和组件一次,之后元素和组件将失去响应式功能 v-if和v-show 根据表达式的布尔值(true/false)进行判断是否渲染该元素 注:v-if 有更高的切换开销,而 v ...

  10. 玩转Zabbix智能告警:降噪、排班、认领、升级、IM协同

    Zabbix作为一款流行的企业级监控工具,可以监控各种网络设备和服务的状态,并提供强大的告警功能,能够在出现异常情况时及时通知管理员.以下是Zabbix的一些特点: 支持多种监控方式,包括SNMP.J ...