记录--让我们来深入了解一下前端“三清”是什么

这篇具有很好参考价值的文章主要介绍了记录--让我们来深入了解一下前端“三清”是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--让我们来深入了解一下前端“三清”是什么

前端“三清”

在前端开发中,我们经常听到关于“三清”的说法,即 windowdocumentObject。这三者分别代表了 BOM(浏览器对象模型)、DOM(文档对象模型)以及 JS 的顶层对象。在这个体系中,我们通过 JavaScript 与浏览器进行深度交互,构建出丰富多彩的网页应用。同时,JS 类也是前端开发中常用的构建模块,通过构造函数和原型,我们能够创建出更为复杂的对象和功能。

BOM

首先让我们来了解BOM:

BOM(浏览器对象模型)是一组用于与浏览器交互的对象,提供了 JavaScript 访问浏览器功能的接口。对于JavaScript:为了能够让JavaScript能控制浏览器的行为JavaScript就有了一套自己的BOM接口

以下是 BOM 中一些常见的对象和功能:

1. window 对象:

window 对象是 BOM 的顶层对象,代表浏览器的一个窗口或一个标签页。window 对象包含了很多属性和方法,例如:

  • window.innerWidthwindow.innerHeight:获取浏览器窗口的内部宽度和高度。
  • window.location:提供了与当前窗口中加载的文档有关的信息,比如当前 URL。
  • window.document:表示当前窗口中加载的文档,即 DOM。

2. 弹窗和对话框:

  • window.alert():弹出警告框。
  • window.confirm():弹出确认框,用户可以点击“确定”或“取消”。
  • window.prompt():弹出提示框,通常用于从用户获取输入。

3. 定时器:

  • window.setTimeout():在一定时间后执行一次指定的函数。
  • window.setInterval():以指定的时间间隔重复执行指定的函数。
  • window.clearTimeout()window.clearInterval():用于取消之前通过 setTimeoutsetInterval 设置的定时器。

4. 导航和历史:

  • window.history:提供对浏览器历史记录的操作,比如前进、后退。
  • window.location:提供对当前 URL 的操作,可以用于导航到新的页面。

5. 屏幕信息:

  • window.screen:提供有关用户屏幕的信息,如屏幕宽度、高度。

6. 存储:

  • window.localStoragewindow.sessionStorage:用于在客户端存储数据,分别在本地存储和会话存储中。

7. 其他:

  • window.navigator:提供关于浏览器的信息,如浏览器名称、版本、操作系统等。
  • window.console:用于在控制台输出信息,方便调试。

BOM 提供了丰富的接口,使开发者能够与浏览器进行交互,控制页面的导航、执行定时任务、获取用户屏幕信息等。在编写代码时,建议谨慎使用不同浏览器独有的 BOM 特性,以确保跨浏览器的兼容性。

DOM

DOM(文档对象模型)是一种用于表示和操作文档的树状结构的编程接口。它将文档表示为一个由节点组成的树,每个节点代表文档中的一个元素、属性、文本等。DOM 提供了一种以编程方式访问、更新和操作 HTML 或 XML 文档的方法,使开发者能够通过 JavaScript 动态地操纵页面的内容和结构。

对于JavaScript:为了能够使JavaScript操作HtmlJavaScript就有了一套自己的DOM编程接口

DOM 的基本概念:

  1. 节点(Node): DOM 中的基本单位,文档中的所有内容都是节点。节点可以是元素、属性、文本等。
  2. 元素节点(Element Node): 表示文档中的元素,如 <div><p><span> 等。
  3. 属性节点(Attribute Node): 表示元素的属性,如 <div id="example"> 中的 id 属性。
  4. 文本节点(Text Node): 表示元素中的文本内容。
  5. 父节点、子节点、兄弟节点: 节点之间的关系。一个节点的直接包含者称为父节点,被它直接包含的节点称为子节点,具有相同父节点的节点称为兄弟节点。

以下是 DOM 的一些常见属性和方法:

  1. document 对象: 表示整个文档,是 DOM 树的入口。通过 document 对象,可以访问和操作文档的各个部分。
  2. getElementById() 方法: 通过元素的 id 获取元素节点。
var element = document.getElementById('example');
  1. getElementsByClassName() 和 getElementsByTagName() 方法: 分别通过类名和标签名获取元素节点。
var elementsByClass = document.getElementsByClassName('example');
var elementsByTag = document.getElementsByTagName('p');
  1. querySelector() 和 querySelectorAll() 方法: 使用 CSS 选择器语法获取元素节点。
var element = document.querySelector('#example');
var elements = document.querySelectorAll('.example');
  1. createElement() 和 createTextNode() 方法: 创建新的元素和文本节点。
var newElement = document.createElement('div');
var newText = document.createTextNode('Hello, DOM!');
  1. 节点的属性和方法: 节点对象有各种属性和方法,用于访问和操作节点的内容、样式、事件等
// 获取节点的文本内容
var textContent = element.textContent;

// 设置节点的样式
element.style.color = 'red';

// 添加事件监听器
element.addEventListener('click', function() {
  // 处理点击事件
});

// 向element内部的最后面添加一个节点,传入的参数是节点类型
element.appendChild(Node)
 
// 向element内部某个已存在的节点的前面插入一个节点,仍然传入一个节点类型的参数
element.insertBefore(new_Node,existed_Node)

// 删除element内的某个节点,传参是节点类型参数
element.removeChild(Node) 

DOM 操作的基本流程:

  1. 选择目标节点: 使用上述方法选择要操作的元素节点。
  2. 操作节点: 使用节点的属性和方法进行相关操作,如修改文本内容、样式、添加或移除节点等。
  3. 更新页面: 对节点进行操作后,通过 appendChild()insertBefore() 等方法将更新后的节点插入到文档中,或者通过修改节点的属性直接更新页面。

DOM 的灵活性和强大性使得它成为前端开发中不可或缺的一部分。通过合理地使用 DOM,开发者能够实现动态更新页面、响应用户操作、处理表单数据等丰富的功能,提升用户体验。然而,需要注意的是,频繁的 DOM 操作可能导致性能问题,因此在实际开发中应该注意优化操作,并尽量减少不必要的重绘和回流。

JS的顶层对象

JavaScript 的顶层对象是 Object,它是所有对象的父对象。Object 对象在 JavaScript 中扮演着非常重要的角色,提供了一些常用的方法和属性,同时也是原型链的起点。

创建对象的方式

  1. 使用字面量:

javascriptCopy code
var obj = { key: 'value' };

         2.使用构造函数:

javascriptCopy code
var obj = new Object();
obj.key = 'value';

Object 对象的属性和方法

1. 属性

  • Object.prototype Object 对象的原型,所有对象都继承自这个原型。这是原型链的起点。
  • Object.length 通常用于获取 Object 构造函数的长度属性,值为 1。

2. 方法

  • Object.assign(target, ...sources) 用于将一个或多个源对象的属性复制到目标对象。它会返回目标对象。

javascriptCopy code
var target = { a: 1, b: 2 };
var source = { b: 3, c: 4 };
var result = Object.assign(target, source);
console.log(result); // { a: 1, b: 3, c: 4 }
  • Object.create(proto, [propertiesObject]): 创建一个新对象,使用现有的对象作为新对象的原型。
javascriptCopy code
var protoObj = { x: 10 };
var newObj = Object.create(protoObj);
console.log(newObj.x); // 10
  • Object.keys(obj) 和 Object.values(obj) 返回一个包含对象自身所有属性名或属性值的数组
javascriptCopy code
var obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // ['a', 'b', 'c']
console.log(Object.values(obj)); // [1, 2, 3]
  •  Object.entries(obj) 返回一个包含对象自身所有 [key, value] 对的数组。
javascriptCopy code
var obj = { a: 1, b: 2, c: 3 };
console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]
  • Object.freeze(obj) 和 Object.seal(obj) 分别用于冻结对象(使对象不可更改)和封闭对象(使对象不可添加、删除属性)。
javascriptCopy code
var obj = { x: 1, y: 2 };
Object.freeze(obj);
obj.x = 10; // 不会生效,obj.x 仍然为 1


javascriptCopy code
var obj = { x: 1, y: 2 };
Object.seal(obj);
obj.z = 3; // 不会生效,obj 中不会添加 z 属性

原型链

Object 对象是 JavaScript 中原型链的起点。每个对象都有一个 __proto__ 属性,指向它的原型对象。在原型链中,Object.prototype 是所有对象的祖先。

javascriptCopy code
var myObject = {};
console.log(myObject.__proto__ === Object.prototype); // true
console.log(Object.prototype.__proto__); // null,原型链的终点

通过原型链,对象可以继承 Object.prototype 的属性和方法,这包括一些基本的对象操作,例如 toString()hasOwnProperty() 等。

javascriptCopy code
var myObject = {};
console.log(myObject.toString()); // [object Object]
console.log(myObject.hasOwnProperty('toString')); // false,来自原型链
总体而言,Object 对象作为 JavaScript 中的顶层对象,原型在哪一栈上有的方法,对象都可以用,它也提供了一些常用的工具方法和属性,同时在原型链中发挥了关键作用。也可以说js面向对象不是血缘的,而是面向原型的,理解 Object 对象有助于更深入地理解 JavaScript 的对象模型。

本文转载于:

https://juejin.cn/post/7300100800906788873

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--让我们来深入了解一下前端“三清”是什么文章来源地址https://www.toymoban.com/news/detail-746121.html

到了这里,关于记录--让我们来深入了解一下前端“三清”是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 Go 语言从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关

    2023年04月21日
    浏览(12)
  • vue3前端开发,自学一下reactive,ref的差异是什么。

    vue3前端开发,自学一下reactive,ref的差异是什么。

    vue3前端开发,自学,学习一下,reactive和ref的差别。以及基础用法。 前言,这2个东西,都能对外输出动态的数据对象。但是,有点区别,是,reactive只支持输入一个对象作为参数,ref则还可以支持简单的数据信息作为参数。待会有案例代码展示。 下面看看代码内容。第一个

    2024年01月18日
    浏览(11)
  • 【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane

    【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane

    目录 前言 一、Crane目的是什么? 二、Crane有哪些功能? 1.成本可视化和优化评估  2.推荐框架  3.基于预测的水平弹性器 4.负载感知的调度器 5.拓扑感知的调度器 6.基于 QOS 的混部 三.Crane的整体架构及特性 1.Crane架构 Craned Fadvisor Metric Adapter Crane Agent 2.Crane特性 一键部署 简单易

    2024年02月05日
    浏览(13)
  • 什么是云仓?如何深入了解云仓?云仓运营模式是怎样?

    什么是云仓?如何深入了解云仓?云仓运营模式是怎样?

    云仓简单来说就是一种较为先进的第三方仓储,与传统的电商仓库不同的是“云”。“云”就是最近几年特别流行的“云计算”,云仓说白了是在软件上利用云计算以及现代管理方式,硬件上依托仓储设施进行货物流通的一个第三方仓储物流。 云仓的优势近近几年都已经被体

    2024年02月13日
    浏览(9)
  • [Eigen中文文档] 深入了解 Eigen - Eigen内部发生了什么(一)

    文档总目录 英文原文(What happens inside Eigen, on a simple example) 考虑以下示例程序: 本页的目标是了解 Eigen 如何编译,假设启用了 SSE2 矢量化(GCC 选项 -msse2 )。 为什么讨论这个问题 也许你认为上面的示例程序很简单,编译它应该不涉及任何非常有趣的事情。在开始之前,让我

    2024年02月13日
    浏览(7)
  • [Eigen中文文档] 深入了解 Eigen - Eigen内部发生了什么(二)

    文档总目录 英文原文(What happens inside Eigen, on a simple example) 求和表达式的构造 现在我们的向量已经构建完毕,让我们继续下一行: 操作符 + 返回一个“向量之和”表达式,但实际上此时并不执行计算。执行计算的是运算符 = (其调用随后发生)。 现在让我们看看 Eigen 这时做

    2024年02月13日
    浏览(9)
  • 什么是认沽期权,深入了解认沽期权的特性与运作方式

    什么是认沽期权,深入了解认沽期权的特性与运作方式

    上证50ETF认沽期权和认购期权一样,是我们在进行上证50ETF期权投资的时候必须要做出选择的两个选项。认购期权和认沽期权实际上是做多和做空,现在我们来看看什么是认沽期权,深入了解认沽期权的特性与运作方式。 什么是认沽期权? 一、认沽期权的定义: 认沽期权,又

    2024年01月16日
    浏览(10)
  • 【概念记录】什么是 行最简形 矩阵?| 人工智能 面试题:解释一下集成学习(Ensemble Learning)的概念和优势。| 集成学习 概念,优势,方法

    【概念记录】什么是 行最简形 矩阵?| 人工智能 面试题:解释一下集成学习(Ensemble Learning)的概念和优势。| 集成学习 概念,优势,方法

      “生活不是电影,生活比电影苦。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博主🏅   🏆[5] CSD

    2024年02月06日
    浏览(14)
  • 无线路由器1、2、3根天线有什么区别?深入了解MIMO技术的神奇

    前言 “天线越多覆盖越广,天线越多信号越强,总之天线越多路由就越好”——觉得很“常识”的朋友可以继续往下看正文了,觉得小编弱爆了小编是那个什么的估计也不会点进来。还是那句话,我们的干货帖大多数是为了扫盲,欢迎各位大神补充、指正。 首先,大家也应

    2024年02月06日
    浏览(6)
  • 关于连锁,我们与ChatGPT的聊了一下

    关于连锁,我们与ChatGPT的聊了一下

    下文内容为编者与ChatGPT的实际对话并附对话截图。对话内容为与连锁相关的问答以及建议咨询。内容仅供参考! ChatGPT相较于2020年推出即被遗忘的Chat3,最明显区别亦是本次出圈核心原因的一点在于交互界面——即对话框,而内容仍在接受使用者的考量与训练。对话如下:

    2024年02月01日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包