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. CCL 2024 Task7 双任务冠军

    近期参加NLP领域CCL2024评测,现将赛题背景和实现方法分享,推理文本纠错领域的发展. 1.背景信息 随着教育的发展和网络的普及,作文评价的规模越来越大,人工评改作文的成本和效率成为一大难题.为了 ...

  2. Linux之kill命令

    1.kill命令的使用格式 kill [参数] [进程号] 2.kill命令的功能 发送指定的信号到相应进程.不指定型号将发送SIGTERM(15)终止指定进程.如果任然无法终止该程序可用" ...

  3. equals && deepEquals

    equals && deepEquals 本文分为以下几个部分 equals deepEquals 总结 equals 首先说明:这里说的 equals 是 java.util.Arr ...

  4. weinre  远程实时调试手机上的Web页面 JAVASCRIPT远程调试

    版权归作者所有,任何形式转载请联系作者.作者:U_U(来自豆瓣)来源:https://www.douban.com/note/289846168/ 调试前端页面我一直使用着神器Chrome开发人员工具 ...

  5. NOIP模拟67

    前言 从这一次到 71 都是多校联考了,尽管考的不咋样.. T1 数据恢复 解题思路 这个题真的是.. 先声明一个点,对于优先队列以及 set 都是在某个元素插入的时候进行比较,但是在之后如果修改比较 ...

  6. js 生成pdf

    最简洁的代码 <script src="js/html2canvas.min.js" type="text/javascript" charset=&qu ...

  7. redhat8连接xshell命令卡顿

    取消下方  转发x11连接到(X) 再重新连接一遍 就好了

  8. Kali Linux 终端字体配色

    在用root用户登录Kali Liunx时,会发现终端的字体无配色,非常难看,以下这幅图便是kali用户和root用户的区别,看着真难受. echo $PS1,这便是区别所在. 那我们怎么让root用 ...

  9. springboot项目中一些小技巧

    一.使用命令创建maven工程 1.例如我们想在IDEA的工作空间目录下E:\Gitee\springboot,创建maven项目,首先先进入该目录下 2.去掉原来的目录,输入cmd,然后回车,进入命 ...

  10. 利用夜莺开源版对H3C无线设备监控

    编者荐语:真正搞监控的人肯定知道 SNMP 水有多深,有时我甚至腹黑猜测,这些厂商是故意的吧,,,指标不标准,格式各异,只能靠一款灵活的采集器了,本文是夜莺社区用户写的文章,转给大家参考. autho ...