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. 阿里云sdk调用

    slb调用 环境包安装 pip install alibabacloud_credentials  --trusted-host mirrors.aliyun.com  -i  http://mirr ...

  2. Expander展开收缩动画

    这个问题困扰了我一天,最后下了个MaterialDesign的demo,看了下他的源码,才恍然大悟,原来很简单. 我原来的设想是在expander的ControlTemplate设置触发器,在IsEx ...

  3. .NET下免费开源的PDF类库(PDFSharp)

    前言 目前.NET 体系下常见的PDF类库有Aspose.QuestPDF.Spire.iTextSharp等,有一说一都挺好用的,我个人特别喜欢QuestPDF它基于 C# Fluent API 提 ...

  4. FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

    ​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10.Mozilla Daala以及Cis ...

  5. Pyinstaller打包exe的反编译——LitCTF 2024(公开赛道)ezpython!!!!!

    这个工具折磨了我很久,搭配题目记录一下... 题目 Die 打包工具: PyInstaller 建议下载GitHub的:GitHub - extremecoders-re/pyinstxtractor ...

  6. Qt内存回收机制

    参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=16 Qt中内存的回收是自己完成的,实验中,我们自定义一个按钮,通过重写析构函数来观察现象. 新建 ...

  7. 2023 Hive 面试宝典

    先说一些废话 总结一下Hive面试宝典,方便读者快速过一遍Hive面试所需要的知识点 Hive的介绍 Hive和Hadoop的关系 Hive利用hdfs存储数据,利用MapReduce查询数据 Hiv ...

  8. react自定义导航组件 路由参数

    为何需要自定义导航? 因为在项目中往往不是所有的声明式导航都是需要a标签完成,有时候可能需要别的标签,此时如果在需要的地方去写编程式导航就会有代码重复可能性,就在对于公共代码进行提取. 思路: 定义一 ...

  9. Java中的ThreadLocal和 InheritableThreadLocal

    Java中的ThreadLocal和 InheritableThreadLocal package com.example.core.mydemo.java; /** * output * Threa ...

  10. CountDownLatch demo演示裁判和选手赛跑

    # CountDownLatch demo演示裁判和选手赛跑 package com.example.core.mydemo; import java.util.concurrent.CountDow ...