BOM

BOM

1 BOM的概念

BOM Browser Object Model(浏览器对象模型)的缩写,提供与浏览器窗口进行交互的对象。JavaScript语法的标准化组织是ECMADOM的标准化组织是W3C,BOM缺乏标准。这也是各种浏览器不兼容的根源所在

2 window对象

window对象是BOM的核心,是最顶层的对象,所有对象都是通过它延伸出来的

2.1全局作用域

1.定义在全局环境下的变量都会成为window对象的属性;

2.把变量定义在函数体里,可以有效减少全局环境下的变量冲突,避免污染全局环境;

3.通过var在全局作用域下声明的变量用delete无法删除;

例如:

var obj = {name:'xxx'};

//删除对象的属性用delete

delete obj.name;

4.在函数内部不用var声明的变量会成为全局变量,即window对象的属性

5.window对象可以在代码中省略,如window.alert()可以写成alert();

2.2 window对象下的属性

2.2.1常用属性

2.2.1.1浏览器窗口尺寸

1.innerWidth/innerHeight, //表示浏览器窗口可视区域尺寸
2.outerWidth/outerHeight //表示整个浏览器窗口的尺寸

2.2.1.2滚动相关

1.scrollX/scrollY //获取浏览器窗口滚动条滚动过的距离

2.scrollTo(x,y) //设置浏览器滚动距离

3.scrollBy(xnum,ynum) //设置基于当前位置滚动的距离,可以为负数

2.2.1.3 JS中如何获取HTML中元素的width,height

offsetWidth:元素边框内的宽;

offsetHeight:元素边框内的高。

2.2.2常用方法(了解)

1.alert(msg)//弹出对话框

2.confirm(msg)//弹出警告框,返回布尔值

3.prompt(msg,default)//弹出输入框,返回消息或null

以上三个方法都会暂停代码的执行

4.open(url,name,[options]) : 打开一个新窗口并返回新 window 对象

name:不命名会每次打开新窗口,命名的第一次打开新窗口,之后在这个窗口中加载

options为字符串:'width=400,height=400,top=200,left=200'

opener父窗口对象,通过open方法打开的窗口才有opener对象

5.close(): 关闭窗口

6.print(): 调出打印对话框

2.2.3属性对象

2.2.3.1 document(核心)

文档对象,让我们可以在js脚本中直接访问页面元素(DOM)DOM章节详细讲解

2.2.3.2 history(重要)

历史对象,包含窗口的浏览历史,可以实现后退

1.属性:

length 返回浏览器历史列表中的 URL数量。

2.方法:

back() 加载 history列表中的前一个 URL

forward() 加载 history列表中的下一个 URL

go() 加载 history列表中的某个具体页面,支持负数:

history.go(2);//向前两个页面

history.go(-2);//后退两个页面

2.2.3.3location(重要)

locationBOM最有用的对象之一,保存着当前窗口中加载文档的相关信息,还提供一些导航功能,它是个很特别的对象,既是window的属性,也是document的属性

1.属性:

hash 设置或返回从井号 (#)开始的 URL(锚)==>哈希值。

href 设置或返回完整的 URL

search 设置或返回从问号 (?)开始的 URL(查询部分)。

encodeURI();//转码

decodeURI();//解码

PS:修改以上属性(hash除外)都会刷新当前页面,并生成历史纪录

2.方法:

reload() 重新加载当前文档,带参数true表示不使用缓存刷新页面。

2.2.3.4 navigator(了解)

导航对象, 包含所有有关访问者浏览器的信息,通常用于检测浏览器类型

1.appName 浏览器名称

2.appVersion 浏览器版本

3.platform 操作系统

4.userAgent 用户代理信息,通过该属性可以获取浏览器及操作系统信息

5.geolocation 获取地理位置信息

2.3 window对象常用事件

2.3.1 window.onload

页面资源全部加载完成后触发这个事件。其中常用到 window.onload = function(){},主要有两个优点:

1.把变量定义在函数内,可以有效减少全局环境下的变量冲突,避免污染全局环境;

2.window.onload延迟JS代码执行,可以将JS代码写在head里。

2.3.2 window.onscroll

滚动窗口滚动条时触发

2.3.3 window.onresize

窗口大小改变时触发

2.3.4 window.onbeforeunload

在页面关闭时触发这个事件

03-15
### 关于 Byte Order Mark (BOM) 的技术概念 Byte Order Mark (BOM),即字节顺序标记,是一种用于表示Unicode编码文件中字节顺序的特殊字符。它通常出现在文件开头,帮助解析器识别文件使用的具体Unicode编码形式(如 UTF-8、UTF-16 或 UTF-32)。尽管 BOM 对某些程序透明无影响,但在处理文本时可能会引发兼容性问题。 #### BOM 的作用与常见编码关联 在 Unicode 编码标准下,BOM 被定义为 U+FEFF 字符,在不同编码中的表现如下: - **UTF-8**: 表现为三个字节序列 `EF BB BF`。 - **UTF-16 (BE)**: 表现为两个字节序列 `FE FF`。 - **UTF-16 (LE)**: 表现为两个字节序列 `FF FE`[^4]。 对于 Python 来说,默认支持多种编码方式,并允许开发者通过字符串指定具体的编码名称来读取或写入带 BOM 文件的内容[^1]。 #### 如何处理带有 BOM 的文本文件? 当遇到含有 BOM 的文件时,可以采用以下几种方法进行处理: ##### 方法一:使用 Python 自动移除 BOM Python 提供了内置的支持机制,能够自动检测并跳过 BOM 序列。例如,可以通过设置参数 `'utf-8-sig'` 实现这一功能: ```python with open('file_with_bom.txt', mode='r', encoding='utf-8-sig') as file: content = file.read() ``` 上述代码片段会先尝试寻找并去除可能存在的 BOM 标记后再继续正常操作数据流。 ##### 方法二:手动删除 BOM 如果需要更精细控制或者不希望依赖特定库函数,则可以选择手工实现逻辑清除掉这些额外标志位。下面展示了一个简单的例子说明如何做到这一点: ```python def remove_bom(file_path): import codecs bom_bytes = b'\xef\xbb\xbf' with open(file_path, 'rb') as f: raw_data = f.read(len(bom_bytes)) if raw_data != bom_bytes: raise ValueError("File does not start with expected BOM.") # Continue reading rest of the file after skipping over BOM bytes. with open(file_path, 'r', newline='', encoding='utf-8') as cleaned_file: return cleaned_file.readlines() lines_without_bom = remove_bom('./example.txt') print(lines_without_bom[:5]) # Print first five lines post-BOM removal process. ``` 此脚本首先验证目标文档确实存在预期类型的 BOM;随后才执行进一步的动作以忽略该部分而专注于实际有效载荷的数据上[^2]。 #### 总结 虽然 BOM 可以为跨平台间交换提供便利条件,但也增加了复杂度以及潜在错误风险。因此了解其工作原理及其应对策略是非常重要的技能之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值