理解JavaScript中的window对象

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片 转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。 阅读详情

前言

每个JavaScript环境都有一个全局对象(global object)。在全局范围内创建的任何变量实际上都是这个对象的属性,而任何函数都是它的方法。在浏览器环境中,全局对象是 window 对象,它代表了包含网页的浏览器窗口。

在这篇文章中,我们将介绍 Window 对象的一些重要用途:

history

浏览器对象模型

浏览器对象模型(简称BOM)是一个属性和方法的集合,包含了关于浏览器和计算机屏幕的信息。比如说,我们可以找出哪个浏览器正在被用来浏览一个页面,尽管这种办法不可靠。我们还可以找出它被浏览的屏幕尺寸,以及在当前页面之前已经访问过哪些页面。它还可以用于创建弹出式窗口这种相当可疑的做法,如果你喜欢惹恼你的用户的话。

BOM没有官方的标准,尽管所有主流浏览器都支持许多属性和方法,但这已经成为了一种事实上的标准。这些属性和方法是通过 window 对象提供的,每一个浏览器窗口,tab页,弹窗,frame以及iframe都具有 window 对象。

浏览器环境

请记住,JavaScript可以在不同的环境上运行。BOM只在浏览器环境中有意义。这意味着其他环境可能没有 window 对象,尽管他们仍有全局对象。比如说,Node.js拥有一个称为 global 的对象。

如果你不知道全局对象的名称,你可以在全局作用域中使用关键字 this 来引用全局对象。下面的代码提供了一种将变量 global 赋值给全局对象的快捷方式:

const global = this;

深入全局变量

全局变量是不使用 const 、 let 或 var 关键字创建的变量。全局变量可以在整个程序中进行访问。

全局变量是全局对象的属性。在浏览器环境中,全局对象就是 window 对象。这意味着任何创建的全局变量都是 window 对象的属性,可以从如下示例中看出:

x = 6;  // 创建的全局变量
>> 6
window.x // 同一个变量可以作为window对象的一个属性被访问
>> 6
// window.x === x
>> true

通常情况下,你应该在不使用 window 对象的情况下引用全局变量。这样可以减少字符输入,并且你的代码在不同的环境中也更容易移植。如果你需要检查一个全局变量是否已经被定义,则是一个例外。比如说,如果 x 没有被定义,下面的代码将会抛出 ReferenceError 错误:

if (x) {
    // do something
}

然而,如果变量作为 window 对象的属性进行访问,那么代码仍然可以正常运行, window.x 会直接返回 false ,意味着代码块将不会被执行:

if (window.x) {
    // do something
}

有些函数比如说 parseInt() 和 isNaN() ,就是全局对象的方法。在浏览器环境中,它们就是 window 对象的方法。与变量一样,习惯上省略通过 window 对象而直接访问它们。

对话框

在浏览器中,有三个函数用来生成对话框: alert() , confirm() 以及 prompt() 。这些都不是ECMAScript标准的一部分,尽管所有主流浏览器都支持它们作为 window 对象的方法。

Alert Dialog

window.alert() 会暂停程序的执行,并在对话框中显示消息。消息被作为参数提供给方法,方法总是返回 undefined :

window.alert('Hello');
>> undefined

Confirm dialog

window.confirm() 方法会停止程序的执行,并显示一个确认对话框。展示作为参数提供的信息,并给出确定或取消的选项。如果用户点击确定,则返回布尔值 true ,如果用户点击取消,则返回布尔值 false :

window.confirm('Do you wish to continue?');
>> undefined

Prompt dialog

window.prompt() 方法会停止程序的执行,并显示一个对话框。展示作为参数提供的信息,以及一个允许用户输入文本的输入字段。当用户点击确定时,该文本会作为字符串进行返回。如果用户点击取消时,将会返回 null :

window.prompt('Please enter your name:');

谨慎使用原生对话框

值得再次强调的是,这些方法会在程序执行过程中让程序停止执行。这意味着在方法被调用的时刻,一切都将停止处理,直到用户点击确认或者取消。如果程序需要同时处理其他东西,或者程序在等待回调函数,那么这种方式就会造成问题。

在一些场合,这种功能因具备一些优势从而可以使用。比如说, window.confirm() 对话框可以被用来当做最终确认,检查用户是否想要删除资源。这将阻止程序继续进行并阻止删除资源,直到用户来决定如何处理。

还值得注意的是,大多数浏览器允许用户禁用任意重复出现的对话框,这意味着该功能是不可靠的。

浏览器信息

window 对象有一系列的属性和方法,这些属性和方法提供了有关用户浏览器的信息。

Navigator对象

window 对象有一个属性叫做 navigator ,该属性返回 Navigator 对象的引用。 Navigator 对象包含有关正在使用的浏览器的信息。上面的 userAgent 属性将会返回有关正在使用的浏览器和操作系统的信息。比如说,如果运行下面的代码,它将显示我正在使用Mac OS上的Safari 10版本:

window.navigator.userAgent
>>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8"

不过,不要依赖这些信息,因为用户可以修改这些信息,从而伪装成其他浏览器。对返回的字符串也很难有任何意义,因为在某种程度上,所有的浏览器都会假装成其他浏览器。

比如说,每个浏览器都会在其自身的 userAgent 属性上包含 Mozilla 字符串,因为遗留的Netscape兼容性的原因。 userAgent 已经从官方标准中废弃,但是它仍然在所有主流浏览器中得到很好的支持。

URL

window.location 是一个对象,该对象包含有关当前页面URL的信息。它包含一些属性,提供关于URL的不同片段的信息。

href 属性将完整的URL作为字符串进行返回:

window.location.href
>> "<https://www.sitepoint.com/javascript-window-object/>"

该属性(以及本节其他大多数属性)是可读/可写属性,这意味着可以通过赋值被更改。如果完成赋值操作,当前页面将会使用新的属性值进行重新加载。比如说,输入下面的代码到浏览器的控制台中,浏览器将会重定向到指定页面:

window.location.href = '<https://www.sitepoint.com/>'
>> "<https://www.sitepoint.com/>"

protocol 属性返回一个描述所使用的协议(比如 http ,  https ,  pop2 ,  ftp 等等)的字符串。注意字符串的末尾有冒号:

window.location.protocol
>> "https:"

host 属性返回一个描述当前URL的域名以及端口号的字符串。如果使用的默认端口号80,那么端口号通常会被省略:

window.location.host
>> "www.sitepoint.com"

hostname 属性返回一个描述当前URL域名的字符串:

window.location.hostname
>> "www.sitepoint.com"

port 属性返回一个描述端口号的字符串,如果端口没有显式地在URL中声明,它将返回空字符串:

window.location.port
>> ""

pathname 属性返回域名后面的路径字符串:

window.location.pathname
>> "/javascript-window-object/"

search 属性返回一个以"?"开头的字符串,后面是查询字符串参数。如果没有查询字符串参数,将会返回空字符串:

window.location.search
>> ""

hash 属性返回一个以"#"开头的字符串,后面是片段标识符。如果没有片段标识符,将返回空字符串:

window.location.hash
>> ""

origin 属性返回一个字符串,展示当前页面来源的协议和域名。这个属性是只读的,所以不能被改变:

window.location.origin
>> "<https://www.sitepoint.com>"

window.location 还具有以下方法:

  • reload() 方法可以用来强制重新加载当前页面。如果传递参数 true ,会强制浏览器从服务端重新加载页面,而不是使用缓存的页面。

  • assign() 方法可以用来从参数提供的URL中加载另一个资源。比如说:

    window.location.assign('<https://www.sitepoint.com/>')
  • replace() 方法与 assign() 方法作用几乎相同,除了当前页面不会存储于浏览器历史记录中。所以用户不能使用返回按钮进行返回。

  • toString() 方法返回一个包含整个URL的字符串:

    window.location.toString();
    >> "<https://www.sitepoint.com/javascript/>"

浏览器历史

window.history 属性可用于访问当前浏览器会话中任何先前访问过的页面的信息。避免将其与新的HTML5 History API混淆。

window.history.length 属性显示在到达当前页面之前已经访问了多少个页面。

window.history.go() 方法可以用于跳转至指定页面,0表示跳转至当前页面:

window.history.go(1); // 前进一个页面
window.history.go(0); // 重新加载当前页面
window.history.go(-1); // 后退一个页面

还有 window.history.forward() 以及 window.history.back() 方法,可分别用于前进或后退一个页面,就好像使用了浏览器的前进和后退按钮。

控制窗口

可以使用 window.open() 方法打开一个新的窗口。该方法接收将要打开的页面URL作为第一个参数,窗口的标题作为第二个参数,以及一系列属性作为第三个参数。这也可以赋值给一个变量,这样窗口就可以在以后的代码中被引用:

const popup = window.open('<https://sitepoint.com>','SitePoint','width=700,height=700,resizable=yes');

close() 方法可用于关闭一个窗口,假设你有一个窗口引用:

popup.close();

也可以使用 window.moveTo() 方法移动窗口。该方法接收两个参数,分别是窗口要移动到的屏幕的X轴和Y轴坐标:

window.moveTo(0,0); 
// 移动窗口到屏幕的左上角

你可以使用 window.resizeTo() 方法来调整窗口大小。该方法接收两个参数,用来指定调整后的窗口尺寸的宽度和高度:

window.resizeTo(600,400);

烦人的弹框

这些方法在很大程度上负责给JavaScript一个坏名声,因为它们被用来创建烦人的弹出式窗口,这些窗口通常包含侵入性的广告。从可用性的角度来看,调整或移动用户窗口的大小也是一个坏主意。

许多浏览器阻止弹出式窗口,并在某些情况下不允许调用其中的一些方法。例如,如果有一个以上的标签打开,你就不能调整一个窗口的大小。你也不能移动或调整一个不是用 window.open() 创建的窗口的大小。

尽量少的使用这些方法是明智的,所以在使用它们之前要仔细考虑。几乎总是会有一个更好的替代方案,而一个优秀程序员会努力找到它。

屏幕信息

window.screen 对象包含了关于浏览器所显示的屏幕的信息。你可以分别使用 height 和 width 属性找出屏幕的高度和宽度,单位为像素:

window.screen.height
>> 1024
window.screen.width
>> 1280

availHeight 和 availWidth 可用于查找屏幕的高度和宽度,其中不包括任何操作系统的菜单:

window.screen.availWidth
>> 1280
window.screen.availHeight
>> 995

colorDepth 属性可用于查找用户显示器的颜色位深度,尽管除了收集用户统计数据外,很少有这样做的用例:

window.screen.colorDepth;
>> 24

更适用于移动平台

屏幕对象对移动设备有更多的用途。它还允许你做一些事情,如关闭设备的屏幕,检测其方向的变化或将其锁定在一个特定的方向。

谨慎使用

上一节中所涉及的许多方法和属性在过去被滥用于可疑的活动,如用户代理嗅探,或检测屏幕尺寸以决定是否显示某些元素。这些做法现在已经被更好的做法所取代了,比如媒体查询和特征检测。

文档对象

每个 window 对象包含一个 document 对象。该对象有一系列的属性和方法,用来处理已经加载到窗口的页面。 document 对象包含一些值得关注的方法。

document.write()

write() 方法只是将一串文本写到页面上。如果页面已经加载,它将彻底替换当前文档:

document.write('Hello, world!');

这将用字符串 Hello, world! 替换整个文档。可以在字符串中包含HTML,这将成为DOM树的一部分。例如,下面这段代码将创建一个 <h1> 标签节点和一个文本子节点:

document.write('<h1>Hello, world!</h1>');

document.write() 方法也可以在文档中的 <script> 标签内使用,用于将字符串注入到标记中。这不会覆盖页面上的其他HTML。下面的例子将把文本 "Hello, world!" 放在 <h1> 标签内,页面的其他部分将正常显示:

<h1>
    <script>document.write("Hello, world!")</script>
</h1>

document.write() 的使用是非常不受欢迎的,因为它只能通过在HTML文档中混合JavaScript来进行使用。仍然有一些极其罕见的合法用途,但一个出色的程序员几乎不需要使用它。

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712 LT8711UX是一款高性能C/DP1.2型至HDMI2.0转换器,用于将USB Type-C源或DP1.2源连接到HDMI2.0接收器。该LT8711UX集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射器。此外,还包括两个CC控制器,用于CC通信,以实现DP Alt模式和功率传输功能,一个用于上游Type-C端口和另一个用于下游端口。 阅读详情

相关推荐

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9053

js基础、函数、Window对象、BOM编程

js基础、函数、Window对象、BOM编程JavaScriptJavaScript的基本结构javascript脚本执行原理JavaScript核心语法变量typeof运算符的使用运算符逻辑控制语句消息框和输入框JavaScript的使用方式函数常用的系统函数自定义函数BOM匿名函数Date日期的使用document的使用visibility和displayhistory对象location对象 JavaScript JavaScript可以使网页增加互动性,也可以对表单提交进行验证减轻服务器的负担,Ja

star_of_science的博客 847

文本纠错项目代码调试

文本纠错项目调试

m0_67084346的博客 868

js配置文件,window对象定义全局变量之坑

window.xxx["zidingyi"] 中的 zidingyi 的名称中不要有_或者全大写,可能在有些环境下是报错找不到的!上面是自定义全局变量的js方法,一般写在项目的前端配置文件js中。但是注意有很坑人的地方是。将配置文件js引入对应的页面后,直接使用。

qq_44810785的博客 1614

数据仓库的复用性:设计和构建一个高复用性的数仓

数据仓库的复用性是指在数据仓库的设计和使用过程中,能够实现数据、模型、流程、工具等多个层面的重复利用,减少重复开发,提高开发效率,降低维护成本,并增强灵活性和可扩展性。

z1941563559的博客 1307

AIGC内容溯源技术:如何追踪AI生成内容的原始来源

本文旨在系统性地介绍AIGC内容溯源的技术体系,帮助读者理解如何追踪AI生成内容的来源。我们将覆盖从基础概念到前沿技术的完整知识链,包括但不限于数字水印、区块链存证、内容指纹等技术方案。文章将从AIGC的基本概念出发,逐步深入探讨各种溯源技术,分析其原理和实现,最后讨论实际应用和未来趋势。AIGC:AI Generated Content,人工智能生成内容内容溯源:追踪数字内容的创作、修改和传播历史数字水印:嵌入在数字内容中的不可见识别信息数字水印:隐藏在内容中的识别信息,像隐形墨水内容指纹。

SuperAGI2025 2070

[前端基础] JavaScript 基础篇(下)

一些基础JavaScript知识点,包括DOM、ECMAScript等

不定期更新 Web 开发及机器学习相关博客 1226

YOLOv8 WIOU

本文介绍了如何在YOLOv8中实现WIOU(Weighted Intersection over Union)的修改方法。主要修改了ultralytics/utils/metrics.py文件中的bbox_iou函数,新增了WIoU_Scale类,支持单调性FM v2、非单调性FM v3两种模式,并提供了动态调整的动量参数。修改后的函数支持多种IoU变体(GIoU、DIoU、CIoU等),通过数学公式实现了更精确的边界框回归损失计算,特别针对小目标检测场景进行了优化。该实现使用了PyTorch框架,包含完整

FJN110的博客 2046

JS基本语法-JavaScript中的常用对象3-window对象,即窗口对象

window对象的使用,以及如何打开一个网页,用window.open。

记录和分享程序人生的点点滴滴 1725

HBase在物流行业的应用:轨迹数据存储

想象一下,每天在全球范围内,数以亿计的物流包裹在各个城市、乡镇间穿梭。每一个包裹从发货人手中出发,经过仓储中心、转运站,最终到达收货人手中,这一路上都留下了它的“足迹”,也就是我们所说的轨迹数据。这些数据就像一个个拼图碎片,完整拼接起来后,能够清晰地呈现出整个物流网络的运行状况。例如,你在网上购买了一件心仪已久的商品,迫不及待地想知道它现在到哪儿了。物流平台实时更新的轨迹信息,让你可以准确了解包裹是在运输途中,还是已经到达附近的站点。

架构师的AI之路,分享AI应用开发架构的学习与实践。 965

79、昇腾系列服务器/昇腾系列推理卡/昇腾系列嵌入式开发板+Dify+one api部署DeepSeek-R1-Distill-Qwen-32BW8A8+RAG本地模型知识库和负载均衡双实例

阶段,安装过程缺什么,,在docker外面git下源码,进入容器内部进行量化,这里的容器建议在创建个8卡的容器,双卡容器量化会显示npu显存不够,除非你用cpu转模型,我就懒得创建容器了,使用cpu量化吧,巨慢;创建容器,进入容器,计划使用两张昇腾NPU卡推理DeepSeek-R1-Distill-Qwen-32B的W8A8模型,所以构建的容器用两张卡,选6、7卡吧,0-6号卡可以跑文本嵌入模型、重排序模型;直接进入量化阶段,在容器外面操作即可,环境不用管,因为系统已经默认配置了环境,直接跳到。

sxj731533730 6118

【JavaScript 教程】浏览器—window 对象

作者 | 阮一峰1、概述浏览器里面,window对象(注意,w为小写)指当前的浏览器窗口。它也是当前页面的顶层对象,即最高一层的对象,所有其他对象都是它的下属。一个变量如果未声明,那么默...

web前端开发 1086

爬虫:一文掌握网站加密和混淆以及浏览器调试的技巧

面对加密和混淆技术的网站,传统的爬虫方法可能难以奏效。通过结合浏览器调试工具(如Puppeteer、Playwright)、代理工具(如Burp Suite、Fiddler)以及动态和静态分析技巧,可以深入理解网站的运行机制,绕过加密和混淆,实现有效的数据抓取。同时,务必注意合法合规,尊重目标网站的规则和用户的隐私,确保爬虫行为的正当性和可持续性。

数据知道的博客 9890

JS中的window对象该怎么理解

在 JavaScript 中,window 对象表示浏览器窗口。它可以用来访问浏览器窗口的属性和方法,例如调整窗口大小、打开新窗口等。在浏览器中,window 对象也是全局对象,因此可以在任何脚本中访问它。 ...

weixin_35752645的博客 99

华中数控二次开发手册V1.32正式版.CHM

本文档提供华中数控二次开发说明,包括C#、C++两种语言的二次开发用到的所有API函数。hncsdk:V1.32正式版;开发手册:V1.32正式版;适配器:V1.2.8.0;接口库:V1.2.8.0;对应hnc8版本:V2.02_32423;

黑龙江省(含各市县边界) shp

黑龙江省(含各市县边界) shp资源

深入理解Javascript window对象

[html] view plain copy print? >  html>      head>          meta charset="utf-8" />          title>深入理解Javascripttitle>          script type="text/javascript" charset="utf-8">              c

chenpeng19910926的专栏 376

FOCAS2 Library V4.7.rar

FANUC FOCAS2 的动态库,里面含64位和32位的驱动,如果使用internet连接发那科机床,这个是必须。 全网最新,右键可以看到是4.7版本,支持更多机床。

深入理解JavaScript中的Window对象及其应用

Window对象是浏览器环境中的全局对象,所有全局变量和函数都自动成为其属性和方法。这意味着在脚本中直接定义的变量实际上都挂载在window对象下,这种设计让跨脚本的数据共享变得简单直接。对于前端初学者,建议重点体验window对象的尺寸获取方法和定时器功能,这些都是日常开发中最常用的特性。在浏览器控制台直接运行的代码实际上处于Window对象的全局作用域中。虽然浏览器中全局对象是window,但在Node.js环境下需要使用global对象。这种差异需要在跨平台开发时特别注意。

BlackironFalcon78的博客 799

用CASS绘制地形图详细过程.doc

用CASS绘制地形图详细过程.doc

JS中的document和window的理解

面向对象的思维 万物皆对象(字符串对象等等,对象有属性和方法) JS中的document和window都是对象, JavaScriptHTML DOM(Document Object Model) 当网页被加载时,浏览器会创建页面的文档对象模型。 https://www.runoob.com/js/js-htmldom.html JavaScriptWindow - 浏览器对象模型...

小橙子的博客 704

爬虫 Web Js 逆向基础:window 对象常用属性和方法

window 对象:表示浏览器当前打开的窗口document 对象:载入浏览器的 HTML 文档navigator 对象:包含的属性描述了当前使用的浏览器location 对象:包含有关当前 URL 的信息screen 对象:存放有关显示浏览器屏幕的信息history 对象:包含用户在浏览器窗口中访问过的 URL。

guanxxx的博客 1151

全局对象和函数您知道多少?

转自:全局对象和函数您知道多少?根据JavaScript的运行环境,在JS中存在两种全局对象:JS全局对象和window全局对象。1 第一种是在JS语言核心中,即没有web浏览器宿主环境的条件下,在这种环境中,对于任何JS程序,在https://www.pinlue.com/article/2020/11/0111/5811325360837.html ...

icontent 108

BOM浏览器对象模型-(bom概述-window对象常见事件-定时器-js执行机制-location对象-navigation对象-history对象)

BOM浏览器对象模型 ▲1. BOM 概述 1.1 什么是 BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心 对象是 window。 BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM 缺乏标准,JavaScript 语法的标准化组织是 ECMA,DOM 的标准化组织是 W3C,BOM 最初是Netscape 浏 览器标准的一部分。 DOM 文档对象模型 DOM 就是把「文档」当做一个「对象」来看待

zinc1234596的博客 408

了解js中window对象的基本原理(小白理解笔记)

js 中的 window对象

qq_41162375的博客 476

JavaScript中参数this的简单抽象化理解 this指向 window object 对象 函数

1.隐含参数this的概述,了解什么是参数this 通常说this是一个隐含参数,而这个隐含参数是函数被调用时向函数内部传递进的参数,this指向的是一个对象,这个对象被称之为函数上下文对象,调用方式不同,this会指向对象也不同。 那么我们需要知道: window即浏览器窗口,浏览器中的全局对象就是window对象。 函数被调用时即会向函数内部传递一个隐含参数,无论函数有无形参、实参。this是浏览器传回的,并只与函数调用有关。 我们不需要看函数是如何创建,只需要看函数的被调用方式 2.对...

好活,当赏 2098
上一篇: 彻底搞懂kubernetes调度框架与插件
下一篇: 最强Java面试八股文秋招offer召唤术
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值