BOM

关于BOM
BOM(browserObjectModel)即浏览器对象模型,它提供了独位于内容而与浏览器窗口进行交互的对象,其核心对象是window。
BOM由一系列相关的对象构成,而且每个对象都提供了很多方法和属性

  • 浏览器对象模型
  • BOM的顶级对象是window
  • BOM是浏览器窗口交互的一些对象
  • BOM是浏览器厂商在在各自浏览器上定义的,兼容性较差
  • window:(包括以下)
    • document;
    • location;
    • navigation;
    • screen;
    • history
    • BOM是JS访问浏览器窗口的一个借口
    • BOM是一个全局对象,定义在全局作用域中的变量,函数都会变成window对象的属性和方法
  • window下的一个特殊属性window.name
①窗口加载事件
  • window.onload = function(){}
  • window.addEventLIstener(“load”,function(){});
  • DOMContentLoaded这个是DOM加载完毕,不包含图片,falsh css等就可以执行,加载速度更快一些
  • 这是窗口加载事件,当文档内容完全加载完成后就会触发该事件(包括图像,脚本事件,css文件等等。就调用的处理函数)所以i这里可以把js放在页面元素的上方,因为onload等页面加载完毕后再去执行函数
  • window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个window.onload为准
  • 如果使用addEventListener则没有原则
//用这种方法可以实现多次个加载
window.addEventListener('load',function(){
          var btn = document.querrySelector('button');
          btn.addEventListener('click',function){
              alert('点击我');
            })
       })
②调整窗口大小事件
window.onresize = function(){}
window.addEventListener("resize",function(){});

window.onresize是调整窗口大小加载事件,当触发时就调用的处理函数

③两种定时器
  • setTimeout(调用函数,[延迟的毫秒数]);用于设置一个定时器,该定时器到期后执行调用函数

  • 经常给定时器起一个名字来区别多个定时器
    var timer1 = setTimeout();当清除定时器的时候clearTimeout(就是这个定时器的名字)。

  • setinterval(回调函数,[间隔的毫秒数]);
    它会在一定的时间间隔里反复调用这个函数

  • 清除定时器,clearInterval。这里要注意我们给定时器起名字的时候,要让他成为全局变量。

//写一个案例,关于发送短信的时间限制3秒
<button>发送</button>
    <script>
        var btn = document.querySelector('button');
        var time = 3;
        btn.addEventListener('click',function(){
             btn.disable = true;
             var timer = setInterval(function(){
                 if (timer == 0){
                     clearInterval(timer);
                     btn.disabled = false;
                     btn.innerHTML = '发送';
                     time = 3;
                 }else{
                     btn.innerHTML = '还剩下' + time + '秒';
                     timme--;
                 }
             },1000)
        })
    </script>
④this的指向问题

this指向在函数定义的时候时确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向是调用它的那个函数

⑤js单线程

js的特点是单线程,也就是说,同一个时间只能做一件事情。这是因为这门脚本语言诞生的使命所致,js是为处理页面中用户的交互,以及操作DOM而诞生的。你比如说,你不能同时对一个元素进行删除和添加操作。

同步和异步
  • 同步:前一个任务结束后再去执行另外一个任务,程序的执行顺序与任务的排列顺序是一致的,同步的。好比你先说话再吃东西;
  • 异步:在处理一个任务的时候同时处理另外一个任务,一边吃饭一边说哈。
//看这个
console.log(1);
setTimeout(function(){
     console.log(3);
     },0);
console.log(2);
//123
同步任务和异步任务
  • 同步任务:同步任务在主线程上执行。形成一个执行栈
  • 异步任务:通过回调函数来实现的。如下
    • 1.普通事件,如click,resize等
    • 2.资源加载,如load,error等
    • 3.定时器,包括setinterval,setTimeout等
    • 异步任务相关回调函数添加到任务列表中(任务队列也称为消息队列)
js执行机制
  • 1.先执行执行栈中的同步任务
  • 2.异步任务(回调函数)放入任务队列中
  • 3.一旦执行栈中的多有同步任务执行完毕,系统就会按次序读取任务列表中的异步任务,于是被读取的异步任务结束等待状态,进行执行栈,开始执行。在这里插入图片描述

执行机制

在这里插入图片描述
当我们的主线程拿到这些任务时,先抽出异步任务,然后放到异步进程处理,只有当点击的时候或者计时的时间到了的时候,它才会出现在任务队列里面,处理完就清空。
一旦同步任务执行完,就会回到异步任务中去看看还有没有可以执行的。在这里插入图片描述

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 可以为跨平台间交换提供便利条件,但也增加了复杂度以及潜在错误风险。因此了解其工作原理及其应对策略是非常重要的技能之一。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值