Menu Close

JavaScript 的基本特性

本章简要回顾了到目前为止我们所学的 JavaScript 特性,并特别关注其中一些细微之处。

代码结构

语句以分号 ; 作为分隔符:

alert('Hello'); alert('World');

通常,换行符也被视为分隔符,因此换行也可以起作用:

alert('Hello')
alert('World')

这叫做“自动分号插入”。有时它不起作用,例如:

alert("There will be an error after this message")

[1, 2].forEach(alert)

大多数代码风格指南都一致认为,我们应该在每个语句后加上分号。

但在代码块 {...} 后,以及像循环这样的语法结构后,分号并不是必需的:

function f() {
  // no semicolon needed after function declaration
}

for(;;) {
  // no semicolon needed after the loop
}

…但是即使我们在某处加上“额外”的分号,也不会导致错误。它会被忽略。

详情请看:Javascript 代码结构

严格模式

为了完全启用现代 JavaScript 的所有特性,我们应该在脚本开头添加 "use strict"

'use strict';

...

该指令必须位于脚本的顶部或函数体的开头。

没有 "use strict",代码仍然能正常工作,但某些特性会以旧版的“兼容”方式运行。我们通常更倾向于使用现代最新技术。

一些现代的语言特性(如我们将来学习的类)会隐式启用严格模式。

详情请看: JavaScript 严格模式

变量和数据类型

可以使用以下方式声明:

  • let

  • const(常量,不能被改变)

  • var(旧式声明,稍后会介绍)

变量名可以包含:

  • 字母和数字,但第一个字符不能是数字。

  • 字符 $_ 是正常的,和字母一样使用。

  • 非拉丁字母和象形文字也可以使用,但通常不常见。

变量是动态类型的。它们可以存储任何类型的值:

let x = 5;
x = "John";

有 8 种数据类型:

  • number:用于浮动点数和整数数字,

  • bigint:用于任意长度的整数,

  • string:用于字符串,

  • boolean:用于逻辑值:true/false

  • null:一个具有单一值 null 的类型,表示“空”或“不存在”,

  • undefined:一个具有单一值 undefined 的类型,表示“未赋值”,

  • objectsymbol:用于复杂数据结构和唯一标识符,我们还没有学习这两个类型。

typeof 运算符返回一个值的类型,但有两个例外:

typeof null == "object" // error in the language
typeof function(){} == "function" // functions are treated specially

详情: 变量数据类型

交互

我们使用浏览器作为工作环境,因此基本的界面交互函数包括:

  • prompt(question, [default])
    提出一个问题,并返回访客输入的内容,如果点击“取消”则返回 null

  • confirm(question)
    提出一个问题,并提示选择“确定”或“取消”,返回的结果是 truefalse

  • alert(message)
    显示一条消息。

所有这些函数都是模态的:它们会暂停代码执行,并阻止用户与页面其他部分交互,直到作出回应。

例如:

let userName = prompt("Your name?", "Alice");
let isTeaWanted = confirm("Do you want some tea?");

alert( "Visitor: " + userName ); // Alice
alert( "Tea wanted: " + isTeaWanted ); // true

详情请看:浏览器交互函数:alert、prompt、confirm

运算符

JavaScript 支持以下运算符

算术运算符

  • 常规运算符*+-/,还有取余运算符 % 和幂运算符 **

  • 二元加号 + 用于连接字符串。如果其中一个操作数是字符串,另一个也会被自动转换为字符串:

    alert( '1' + 2 ); // '12', string
    alert( 1 + '2' ); // '12', string

赋值运算符

  • 有简单赋值:a = b,也有复合赋值,如 a *= 2

位运算运算符

  • 运算符在最低位的 32 位整数上工作:需要时可以查阅文档了解详情。

条件运算符

  • 唯一有三个参数的运算符cond ? resultA : resultB。如果 cond 为真,返回 resultA,否则返回 resultB

逻辑运算符

  • 逻辑与 && 和逻辑或 || 进行短路评估,返回停止运算处的值(不一定是 true/false)。

  • 逻辑非 !操作数转换为布尔类型,并返回其相反值。

空值合并运算符

  • ?? 运算符用于从一系列变量中选择一个已定义的值。a ?? b 的结果是 a,除非 anullundefined,这种情况下返回 b

READ  PHP常量

比较运算符

  • 使用相等检查 == 时,如果比较不同类型的值,会将它们转换为数字进行比较(nullundefined 除外,它们只彼此相等,且与其他值都不相等)。所以下面是相等的:

    alert( 0 == false ); // true
    alert( 0 == '' ); // true

其他比较运算

  • 其他比较也会将值转换为数字。

  • 严格相等运算符 === 不进行类型转换:不同类型总是被认为是不同的值。

  • nullundefined 是特殊值:它们之间 == 相等,但与其他任何值都不相等。

  • 大小比较在比较字符串时是逐字符进行的,对于其他类型,会先转换为数字再比较。

其他运算符

循环

我们学习了三种类型的循环:

// 1
while (condition) {
  ...
}

// 2
do {
  ...
} while (condition);

// 3
for(let i = 0; i < 10; i++) {
  ...
}

for(let...) 循环中声明的变量,只在循环内部可见。但我们也可以省略 let,直接复用已有的变量。

指令 break/continue 可以用来退出整个循环或跳过当前迭代。使用标签(label)可以跳出多层嵌套循环。

之后我们还会学习更多用于处理对象的循环类型。

“switch” 结构

“switch” 结构可以替代多个 if 检查。它在比较时使用 ===(严格相等)。

例如:

let age = prompt('Your age?', 18);

switch (age) {
  case 18:
    alert("Won't work"); // the result of prompt is a string, not a number
    break;

  case "18":
    alert("This works!");
    break;

  default:
    alert("Any value not equal to one above");
}

详情请看:javascript switch语句

函数

我们学习了在 JavaScript 中创建函数的三种方式:

  • 函数声明(Function Declaration):在主代码流程中声明的函数。

    function sum(a, b) {
      let result = a + b;
    
      return result;
    }
  • 函数表达式(Function Expression):在表达式上下文中创建的函数。
let sum = function(a, b) {
  let result = a + b;

  return result;
};

箭头函数:

// expression on the right side
let sum = (a, b) => a + b;

// or multi-line syntax with { ... }, need return here:
let sum = (a, b) => {
  // ...
  return a + b;
}

// without arguments
let sayHi = () => alert("Hello");

// with a single argument
let double = n => n * 2;
  • 函数可以有局部变量:这些变量在函数体内或参数列表中声明,仅在函数内部可见。

  • 参数可以有默认值:例如 function sum(a = 1, b = 2) {...}

  • 函数总是会返回某个值。如果没有 return 语句,则返回 undefined

更多内容

这只是 JavaScript 特性的一小部分总结。到目前为止,我们只学习了基础知识。在教程的后续部分,你将会学到更多 JavaScript 的特殊用法和高级特性。

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in JavaScript 基础

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!