Web 基础知识:JavaScript 基础

125 阅读7分钟

本文是系列文章的一部分:Web 基础知识

今天,我们学习 JavaScript 的基础知识。 如果你接触过网络,你肯定接触过大量的 JavaScript。

JavaScript 是一种功能强大的编程语言,主要用于在网站上创建动态交互式内容。它在浏览器中运行,无需重新加载页面即可实现实时更新和用户交互。

它的核心功能之一是操作文档对象模型 (DOM),这使得开发人员能够动态地更改网页的结构和内容。不过,在 Web 基础知识的本章中,我们不会讨论 DOM 以及如何操作它。

JavaScript 是事件驱动的,这意味着它可以响应用户点击或键盘按下等输入,这使得它对于构建交互式网站至关重要。此外,它还支持异步编程,允许在不中断用户界面的情况下执行从服务器获取数据等任务。

如果必须的话,回顾一下!

在开始之前,务必通读 Web 基础系列的每一部分。我们不会停下来解释之前探讨过的概念。本章的目标是学习基础知识,以便我们在下一章中学习更酷、更有趣的内容!


基础知识:变量和类型

变量

JavaScript 中的变量与我们在本系列第二部分中讨论的 CSS 变量略有不同。这是因为 CSS 只能定义一种类型的变量,而 JavaScript 有三种。

变量类型可变性范围细节
var可变的全球的已基本弃用。 这相当于 CSS 变量,可以在文档的任何位置访问和修改。不建议这样做,因为其范围限制不当可能会导致问题。
let可变的块范围这是 JavaScript 中最常见的变量声明类型。 它包含在声明块的范围内,控制其使用。
const不可变*块范围定义一个具有不可变引用的变量。该变量包含在声明它的块的范围内,从而控制其使用。

const处理对象和处理原始类型时,声明的功能有所不同。要了解更多信息,请参阅我们关于对象可变性的文章。

类型

类型分为两类:原始类型和对象类型。

类型细节
原始数字、字符串、布尔值、符号、null、undefined 和 BigInt。
目的对象、数组、函数、日期、正则表达式。

数字

数字类型可以返回整数或浮点数。

let age = 27;let pi = 3.14;

BigInt

当使用常规数字时,我们只能使用所谓的MAX_SAFE_INTEGER,其值上限为9007199254740991

如果需要表示大于 允许的值number,可以使用BigInt值。我们BigInt通过n在数字末尾添加 来声明 ,或者使用BigInt()函数。

let hugeNumber = BigInt("9007199254740991");

字符串

类型是将任意内容封装到引号中而创建的。

let name = "Eduardo";
let gender = "male";
let country = "Brazil";

引号使内容的任何可感知类型无效,这意味着,只要它在引号内,它始终被视为字符串。

/* This is not considered a number.We cannot manipulate the value as one. */let age = "27";/* This will not work, as we're tryingto add an integer to a string value! */age = age + 1;

布尔值

Aboolean是一个可以为true或 的值false

let a = 3;let b = 1;
let isLarger = a > b;b += 5;isLarger = a > b;

不明确的(未定义的)

undefined值是未提供时应用的默认值。

let value;
console.log(value);

无效的(空值)

null正如所描述的那样;与不同,undefined专门设置了一个空值。

let result = null;

对象

对象是 JavaScript 中强大的工具,它允许我们存储键值对以进行数据管理。对象的示例如下:

const person = {  name: "Eduardo";  age: 27;  country: "Brazil";}

然后我们可以检索这些值或修改它们。

console.log(person.name); console.log(person.age);
person.age++;console.log(person.age) 

正如我们之前提到的,Object尽管 s 被附加到const变量,它仍然可以被修改。这是因为,虽然它们的引用是不可变的,但它们的内容却是可变的。要了解更多信息,请参阅我们关于对象可变性的文章。


数组

数组也是一种类型Object。它们可以容纳任何内容类型,包括其他数组!

const numberArray = [1, 2, 3, 4, 5];
const stringArray = ["Corbin", "Eduardo", "Obi", "Sarah"];
const mixedArray = [1, "Corbin", null, undefined];

我们可以使用索引值从数组位置检索值。

const numberArray = [1, 2, 3];console.log(numberArray[0]); console.log(numberArray[3]); 

功能

函数,顾名思义,用于执行可重复使用的任务或返回值。

我们可以用两种不同的方式声明函数。

标准函数

对于过去使用过其他语言的人来说,JavaScript 中的函数可能看起来很熟悉。

function functionName() {  /* Function body. */}

函数可以根据需要接收任意数量的参数。参数的数量没有限制。它们仅仅是函数在其任务中可能用到的类型的“插槽”。我们来看一个简单的例子。

在下面的函数中,我们return传入一个值。通过将firstandsecond参数与>运算符进行比较,我们返回一个布尔值。

function isLarger(first, second) {  return first > second;}

上面的函数isLarger(first, second)接受两个参数。与其他静态类型语言(例如 Java)不同,我们无法指定这些参数的类型。虽然直观上看,该函数需要两个数字,但除非我们自己编写检查,否则我们无法确保这一点。

function isLarger(first, second) {  
    if (typeof first !== 'number' || typeof second !== 'number') {   
        throw new TypeError('Both arguments must be numbers!');  
    }  
    return first > second;
}

箭头函数

箭头函数是标准函数的更简洁版本。

两个函数示例;一个是标准函数,另一个是箭头函数,展示它们之间的区别。

function isLarger(first, second) {  return first > second;}
const isLarger = (first, second) => first > second;

当只有一个return语句时,可以实现更短的语法,如上所示,忽略了主体括号()的需要{}

该示例展示了箭头函数更简洁的语法,无需括号或返回语句。

除此之外,箭头函数在一个重要方面有所不同:this关键字的上下文。

了解更多

了解使用时上下文的重要性 ,this以及标准函数和箭头函数在分配属性时的区别。📃 掌握 JavaScript 的关键字使用

this``bind

将函数作为值调用

📝函数本身就是值。

我们有一篇文章对此进行了更详细的介绍。请查看以了解更多信息。

我们可以将函数及其返回值封装在变量中。

const isLarger = (first, second) => first > second;if (isLarger()) {  console.log("The number is larger, indeed!");}

在本例中,if语句调用了该函数,因为我们()在末尾添加了 。添加括号告诉代码在引用该函数时立即运行它。

引用但不运行函数

在某些情况下,我们确实希望简单地引用一项任务,以便在适当的时候触发它。

假设我们有一个任务需要在点击按钮时运行。我们只希望它在点击按钮时触发,所以我们不能在()末尾添加 ,否则我们会立即运行该函数。

const handleClick = () => alert("Button clicked!");document.querySelector("button").addEventListener("click", handleClick);

现在我们的功能只有在按下按钮时才会触发。


课程

类被放在最后,因为它最健壮。类让我们能够Object轻松地构建,并提供可重用的类特定方法。

在接下来的示例中,我们将创建一个咖啡杯类。该类需要能够:

  • 支持多种杯子尺寸和不同容量
  • 耗尽
  • 补充

让我们从基础开始。

class CoffeeCup {  constructor(size) {    this.size = size;    this.amount = this.getCapacity();    }   getCapacity() {    switch (this.size) {      case 'small': return 50;      case 'large': return 150;      default:      return 100;     }  }}

构造函数

构造函数用于创建附加到特定类实例的属性。在我们的例子中,咖啡杯需要有一个 ,size而这个尺寸又决定了它的另一个属性:amount

为此,我们定义了一个constructor(size)将所需大小参数附加到我们的this.size

关键字this

在为类创建属性时,我们使用this前缀 来绑定它们。如果不使用this.size,则无法使用 来检索值CoffeeCup.size

方法/函数

现在让我们添加附加功能sip()refill()来与我们的咖啡互动。

sip() {  if (this.amount > 0) {    this.amount -= 10;    console.log(`You took a sip. ${this.amount}% coffee left.`);  } else {    console.log("The cup is empty! Time to refill.");  }}refill() {  this.amount = this.getCapacity();  console.log(`The cup is now full again! (${this.size} size)`);}

现在我们可以制作一杯咖啡并与我们之前设置的所有方法进行交互。

const myMediumCoffee = new CoffeeCup('medium');myMediumCoffee.sip();   /* Output: You took a sip. 90% coffee left. */myMediumCoffee.refill();/* Output: The cup is now full again! (medium size) */

接下来:理解 DOM

在下一章中,我们将学习 DOM(文档对象模型)以及它如何在浏览器中渲染内容。这对于 JavaScript 的第二部分至关重要!到时候见。