摘要:❗️ 最近新增的特性 这是一个最近添加到 JavaScript 的特性。 旧式浏览器可能需要 polyfills. 可选链 ?. 是一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。 “不存在的属性”的问题 如果你才刚开始读此教程并学习 JavaScript,那可能还没接触到这
阅读全文
摘要:常规的 {...} 语法允许创建一个对象。但是我们经常需要创建很多类似的对象,例如多个用户或菜单项等。 这可以使用构造函数和 "new" 操作符来实现。 构造函数 构造函数在技术上是常规函数。不过有两个约定: 它们的命名以大写字母开头。 它们只能由 "new" 操作符来执行。 例如: functio
阅读全文
摘要:通常创建对象来表示真实世界中的实体,如用户和订单等: let user = { name: "John", age: 30 }; 并且,在现实世界中,用户可以进行 操作:从购物车中挑选某物、登录和注销等。 在 JavaScript 中,行为(action)由属性中的函数来表示。 方法示例 刚开始,我
阅读全文
摘要:垃圾回收 对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? 可达性(Reachability) JavaScript 中主要的内存管理概念是 可达
阅读全文
摘要:对象引用和复制 对象与原始类型的根本区别之一是,对象是“通过引用”存储和复制的,而原始类型:字符串、数字、布尔值等 —— 总是“作为一个整体”复制。 如果我们深入了解复制值时会发生什么,就很容易理解了。 让我们从原始类型开始,例如一个字符串。 这里我们将 message 复制到 phrase: le
阅读全文
摘要:对象 JavaScript 中有八种数据类型。有七种原始类型,因为它们的值只包含一种东西(字符串,数字或者其他)。 相反,对象则用来存储键值对和更复杂的实体。在 JavaScript 中,对象几乎渗透到了这门编程语言的方方面面。所以,在我们深入理解这门语言之前,必须先理解对象。 我们可以通过使用带有
阅读全文
摘要:简洁是智慧的灵魂 把代码尽可能写得短。展示出你是多么的聪明啊。 在编程中,多使用一些巧妙的编程语言特性。 例如,看一下这个三元运算符 '?': // 从一个著名的 JavaScript 库中截取的代码 i = i ? i < 0 ? Math.max(0, len + i) : i : 0; 很酷,
阅读全文
摘要:正如我们在 代码结构 一章所了解到的那样,注释可以是以 // 开始的单行注释,也可以是 /* ... */ 结构的多行注释。 我们通常通过注释来描述代码怎样工作和为什么这样工作。 乍一看,写注释可能很简单,但初学者在编程的时候,经常错误地使用注释。 糟糕的注释 新手倾向于使用注释来解释“代码中发生了
阅读全文
摘要:我们的代码必须尽可能的清晰和易读。 这实际上是一种编程艺术 —— 以一种正确并且人们易读的方式编码来完成一个复杂的任务。一个良好的代码风格大大有助于实现这一点。 语法 下面是一个备忘单,其中列出了一些建议的规则(详情请参阅下文): 现在,让我们详细讨论一下这些规则和它们的原因吧。 ❗️ 没有什么规则
阅读全文
摘要:在浏览器中调试 调试 是指在一个脚本中找出并修复错误的过程。所有的现代浏览器和大多数其他环境都支持调试工具 —— 开发者工具中的一个令调试更加容易的特殊用户界面。它也可以让我们一步步地跟踪代码以查看当前实际运行情况。 在这里我们将会使用 Chrome(谷歌浏览器),因为它拥有足够多的功能,其他大部分
阅读全文
摘要:JavaScript 特性 代码结构 语句用分号分隔: alert('Hello'); alert('World'); 通常,换行符也被视为分隔符,因此下面的例子也能正常运行: alert('Hello') alert('World') 这就是所谓的「自动分号插入」。但有时它不起作用,例如: ale
阅读全文
摘要:箭头函数,基础知识 创建函数还有另外一种非常简单的语法,并且这种方法通常比函数表达式更好。 它被称为“箭头函数”,因为它看起来像这样: let func = (arg1, arg2, ..., argN) => expression; 这里创建了一个函数 func,它接受参数 arg1..argN,
阅读全文
摘要:函数表达式 在 JavaScript 中,函数不是“神奇的语言结构”,而是一种特殊的值。 我们在前面章节使用的语法称为 函数声明: function sayHi() { alert( "Hello" ); } 另一种创建函数的语法称为 函数表达式。 它允许我们在任何表达式的中间创建一个新函数。 例如
阅读全文
摘要:我们经常需要在脚本的许多地方执行很相似的操作。 例如,当访问者登录、注销或者在其他地方时,我们需要显示一条好看的信息。 函数是程序的主要“构建模块”。函数使该段代码可以被调用很多次,而不需要写重复的代码。 我们已经看到了内建函数的示例,如 alert(message)、prompt(message,
阅读全文
摘要:"switch" 语句 switch 语句可以替代多个 if 判断。switch 语句为多分支选择的情况提供了一个更具描述性的方式。 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块。 就像这样: switch(x) { case 'value1': // i
阅读全文
摘要:循环:while 和 for 我们经常需要重复执行一些操作。 例如,我们需要将列表中的商品逐个输出,或者运行相同的代码将数字 1 到 10 逐个输出。 循环 是一种重复运行同一代码的方法。 ❗️ for…of 和 for…in 循环 给进阶读者的一个小提示。 本文仅涵盖了基础的循环:while,do
阅读全文
摘要:⚠️ 最近新增的特性 这是一个最近添加到 JavaScript 的特性。 旧式浏览器可能需要 polyfills. 空值合并运算符(nullish coalescing operator)的写法为两个问号 ??。 由于它对待 null 和 undefined 的方式类似,所以在本文中我们将使用一个特
阅读全文
摘要:JavaScript 中有四个逻辑运算符:||(或),&&(与),!(非),??(空值合并运算符)。本文我们先介绍前三个,在下一篇文章中再详细介绍 ?? 运算符。 虽然它们被称为“逻辑”运算符,但这些运算符却可以被应用于任意类型的值,而不仅仅是布尔值。它们的结果也同样可以是任意类型。 让我们来详细看
阅读全文
摘要:有时我们需要根据不同条件执行不同的操作。 我们可以使用 if 语句和条件运算符 ?(也称为“问号”运算符)来实现。 “if” 语句 if(...) 语句计算括号里的条件表达式,如果计算结果是 true,就会执行对应的代码块。 例如: let year = prompt('In which year
阅读全文
摘要:我们知道,在数学中有很多用于比较大小的运算符。 在 JavaScript 中,它们的编写方式如下: 大于 / 小于:a > b,a < b。 大于等于 / 小于等于:a >= b,a <= b。 检查两个值的相等:a == b,请注意双等号 == 表示相等性检查,而单等号 a = b 表示赋值。 检
阅读全文