摘要:JavaScript 中有许多属性可让我们读取有关元素宽度、高度和其他几何特征的信息。 我们在 JavaScript 中移动或定位元素时,我们会经常需要它们。 示例元素 作为演示属性的示例元素,我们将使用下面给出的元素: <div id="example"> ...Text... </div> <s
阅读全文
摘要:在我们讨论 JavaScript 处理样式和类的方法之前 —— 有一个重要的规则。希望它足够明显,但是我们仍然必须提到它。 通常有两种设置元素样式的方式: 在 CSS 中创建一个类,并添加它:<div class="..."> 将属性直接写入 style:<div style="...">。 Jav
阅读全文
摘要:DOM 修改是创建“实时”页面的关键。 在这里,我们将会看到如何“即时”创建新元素并修改现有页面内容。 例子:展示一条消息 让我们使用一个示例进行演示。我们将在页面上添加一条比 alert 更好看的消息。 它的外观如下: <style> .alert { padding: 15px; border:
阅读全文
摘要:当浏览器加载页面时,它会“读取”(或者称之为:“解析”)HTML 并从中生成 DOM 对象。对于元素节点,大多数标准的 HTML 特性(attributes)会自动变成 DOM 对象的属性(properties)。(译注:attribute 和 property 两词意思相近,为作区分,全文将 at
阅读全文
摘要:让我们更深入地了解一下 DOM 节点。 在本章中,我们将更深入地了解它们是什么,并学习它们最常用的属性。 DOM 节点类 不同的 DOM 节点可能有不同的属性。例如,标签 <a> 相对应的元素节点具有链接相关的(link-related)属性,标签 <input> 相对应的元素节点具有与输入相关的属
阅读全文
摘要:当元素彼此靠得近时,DOM 导航属性(navigation property)非常有用。如果不是,那该怎么办?如何去获取页面上的任意元素? 还有其他搜索方法。 document.getElementById 或者只使用 id 如果一个元素有 id 特性(attribute),那我们就可以使用 doc
阅读全文
摘要:DOM 让我们可以对元素和它们中的内容做任何事,但是首先我们需要获取到对应的 DOM 对象。 对 DOM 的所有操作都是以 document 对象开始。它是 DOM 的主“入口点”。从它我们可以访问任何节点。 这里是一张描述对象间链接的图片,通过这些链接我们可以在 DOM 节点之间移动。 让我们更详
阅读全文
摘要:HTML 文档的主干是标签(tag)。 根据文档对象模型(DOM),每个 HTML 标签都是一个对象。嵌套的标签是闭合标签的“子标签(children)”。标签内的文本也是一个对象。 所有这些对象都可以通过 JavaScript 来访问,我们可以使用它们来修改页面。 例如,document.body
阅读全文
摘要:JavaScript 语言最初是为 Web 浏览器创建的。此后,它已经演变成了一种具有多种用途和平台的语言。 平台可以是一个浏览器,一个 Web 服务器,或其他 主机(host),甚至可以是一个“智能”咖啡机,如果它能运行 JavaScript 的话。它们每个都提供了特定于平台的功能。JavaScr
阅读全文
摘要:JavaScript 函数提供两个接口实现与外界的交互,其中参数作为入口,接收外界信息;返回值作为出口,把运算结果反馈给外界。 ❗️ 在函数体内,使用 return 语句可以设置函数的返回值。一旦执行 return 语句,将停止函数的运行,并运算和返回 return 后面的表达式的值。 如果函数不包
阅读全文
摘要:❗️ 最近新增的特性 这是一个最近添加到 JavaScript 的特性。 你能在 https://caniuse.com/#feat=bigint 找到当前支持状态。 BigInt 是一种特殊的数字类型,它提供了对任意长度整数的支持。 创建 bigint 的方式有两种:在一个整数字面量后面加 n 或
阅读全文
摘要:❗️ 深入的语言特性 本文所讲的是一个高阶主题,能帮你更好地理解一些边缘情况。 这仅是锦上添花。许多经验丰富的的开发者不甚了了也过得不错。如果你想了解代码运行的本质,那就继续读下去吧。 一个动态执行的方法调用可能会丢失 this。 例如: let user = { name: "John", hi(
阅读全文
摘要:柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。 柯里化不会调用函数。它只是对函数进行转换。 让我们先来看一个例子,以更好地
阅读全文
摘要:内建函数 eval 允许执行一个代码字符串。 语法如下: let result = eval(code); 例如: let code = 'alert("Hello")'; eval(code); // Hello 代码字符串可能会比较长,包含换行符、函数声明和变量等。 eval 的结果是最后一条语
阅读全文
摘要:一个 Proxy 对象包装另一个对象并拦截诸如读取/写入属性和其他操作,可以选择自行处理它们,或者透明地允许该对象处理它们。 Proxy 被用于了许多库和某些浏览器框架。在本文中,我们将看到许多实际应用。 Proxy 语法: let proxy = new Proxy(target, handler
阅读全文
摘要:我们在前面章节中介绍的导出和导入语句称为“静态”导入。语法非常简单且严格。 首先,我们不能动态生成 import 的任何参数。 模块路径必须是原始类型字符串,不能是函数调用,下面这样的 import 行不通: import ... from getModuleName(); // Error, on
阅读全文
摘要:导出(export)和导入(import)指令有几种语法变体。 在上一节,我们看到了一个简单的用法,现在让我们来探索更多示例吧。 在声明前导出 我们可以通过在声明之前放置 export 来标记任意声明为导出,无论声明的是变量,函数还是类都可以。 例如,这里的所有导出均有效: // 导出数组 expo
阅读全文
摘要:随着我们的应用越来越大,我们想要将其拆分成多个文件,即所谓的“模块(module)”。一个模块可以包含用于特定目的的类或函数库。 很长一段时间,JavaScript 都没有语言级(language-level)的模块语法。这不是一个问题,因为最初的脚本又小又简单,所以没必要将其模块化。 但是最终脚本
阅读全文
摘要:异步迭代允许我们对按需通过异步请求而得到的数据进行迭代。例如,我们通过网络分段(chunk-by-chunk)下载数据时。异步生成器(generator)使这一步骤更加方便。 首先,让我们来看一个简单的示例以掌握语法,然后再看一个实际用例。 回顾可迭代对象 让我们回顾一下可迭代对象的相关内容。 假设
阅读全文
摘要:常规函数只会返回一个单一值(或者不返回任何值)。 而 generator 可以按需一个接一个地返回(“yield”)多个值。它们可与 iterable 完美配合使用,从而可以轻松地创建数据流。 generator 函数 要创建一个 generator,我们需要一个特殊的语法结构:function*,
阅读全文