JavaScript极简入门教程(一):基础篇
本文面向具备其他编程语言经验的开发者,精选JavaScript语言中健壮、易读且易维护的核心特性。内容涵盖ECMAScript标准背景、使用Node.js运行环境,详细解析数据类型(数字、字符串)、变量声明、作用域机制以及if、switch、循环等控制流语句。同时深入讲解类型比较、运算符行为及函数定义,旨在帮助读者快速掌握JavaScript编程基础并编写高质量代码。
阅读本教程前,建议读者已具备其他编程语言的开发经验。
学习前提与语言设计哲学
开始学习之前
大多数编程语言都包含优点与缺点。本文仅介绍JavaScript中表现优异的部分,原因如下:
1. 仅学习优良特性可显著缩短学习周期。 2. 生成的代码具有更高的健壮性。 3. 代码可读性更强。 4. 代码更易于后期维护。
弱类型和强类型
通常情况下,越早发现并修复错误,所需付出的成本越低。强类型语言的编译器能够在编译阶段检测出部分错误。JavaScript属于弱类型语言,其解释器不会检查类型错误,但实践经验表明:
1. 强类型所避免的错误通常并非关键性错误。 2. 弱类型提供了更高的灵活性,且无需承担强类型带来的额外负担。
JavaScript相关标准
ECMA-262标准定义了ECMAScript语言规范。我们熟知的JavaScript和ActionScript均基于此标准构建。目前主流使用的是ECMA-262第五版,Google的V8引擎即是对该标准的实现。
运行环境与标准规范
Hello JavaScript
JavaScript是一种脚本语言,必须通过解释器执行。你可以在浏览器环境中运行JavaScript,也可以直接使用Node.js,它集成了Google的V8 JavaScript引擎。鉴于Node.js使用便捷,本文后续示例将基于Node.js环境进行演示。以下是第一个JavaScript程序:
代码如下:
// test.js
console.log("Hello JavaScript");
执行该程序的命令如下:
代码如下:
node test.js
基础语法与数据类型
语法
注释
JavaScript采用与C++相同的注释风格:// 用于单行注释,/* */ 用于多行注释。
数字类型
JavaScript中仅存在一种数字类型,即64位浮点数。该类型包含两个特殊值:NaN和Infinity。NaN代表“不是一个数”(not a number),可通过isNaN函数进行检测;Infinity表示无穷大。Math对象提供了一系列数值操作方法,例如Math.floor用于向下取整。
字符串
字符串字面量可以使用单引号或双引号包裹,转义字符为\(与其他多数语言一致)。JavaScript中每个字符占用两个字节,采用Unicode字符集。字符串具备length属性:
代码如下:
"Hello".length // 值为5,注意不是 "Hello".length()
字符串是不可变的(与Lua类似)。除length属性外,字符串还提供其他方法,例如:
代码如下:
'cat'.toUpperCase() === 'CAT'
变量声明与作用域机制
语句
var语句用于声明局部变量,若不使用var则变量为全局变量。未初始化的变量值为undefined:
代码如下:
function f() {
var localVar = 123;
globalVar = 456;
var i; // i的值为undefined
};
f();
console.log(globalVar); // ok
console.log(localVar); // 错误,localVar没有被定义
由{}包裹的一组语句称为语句块(Block)。与其他语言不同,JavaScript中函数会创建新的作用域,而语句块不会。例如:
代码如下:
{
var v = 123;
}
console.log(v); // ok
条件控制与分支语句
if语句
代码如下:
if (expression)
statement
或者
代码如下:
if (expression)
statement1
else
statement2
或者
代码如下:
if (expression1)
statement1
else if (expression2)
statement2
else if (expression3)
statement3
else
statement4
if语句通过判断表达式的真假来决定执行或跳过特定语句。在JavaScript中,以下值被视为假(其余均为真):
1.false 2.null 3.undefined 4.空字符串 5.0 6.NaN
if语句中的statement可以是单个语句,也可以是语句块。
switch语句
代码如下:
switch (n) {
case 1: // 如果n等于1
// 执行代码块
break;
case 2: // 如果n等于2
// 执行代码块
break;
default: // 如果n不为1也不为2
// 执行代码块
break;
}
这里的break用于退出循环或switch语句。在JavaScript中,比较两个值是否相等有两个操作符:
1.==(对应!=操作符),表示相等。当两个操作数类型不同时,此运算符会尝试进行类型转换后再比较,例如:
代码如下:
var x = 1;
x == 1; // true
x == "1"; // true
2.===(对应!==操作符),表示完全相等。比较两个操作数时不进行类型转换,例如:
代码如下:
var x = 1;
x === 1; // true
x === "1"; // false
需要注意的是,NaN与任何值(包括其自身)都不相等。如果x为NaN,则x !== x(此性质仅对NaN成立)。我们可以据此实现isNaN函数:
代码如下:
function isNaN(n) {
return n !== n;
}
上述switch语句可转换为if语句形式:
代码如下:
if (n === 1)
// ...
else if (n === 2)
// ...
else
// ...
循环结构与枚举
while和do-while语句
代码如下:
while (expression)
statement
如果expression为真,则重复执行statement,直到expression为假为止。
代码如下:
do
statement
while (expression);
与while循环类似,区别在于先执行statement,然后再检查条件expression。
for语句
代码如下:
for (initialize ; test ; increment)
statement
首先执行一次initialize(通常用于初始化循环变量),然后进行test条件测试(通常用于检测循环变量)。若test为假则停止循环,否则执行statement,接着执行increment(通常用于更新循环变量),随后再次进行test条件测试,如此循环往复。使用范例:
代码如下:
for (var i=0; i<5; ++i) {
console.log(i);
}
for语句的另一种形式用于枚举对象的所有属性名:
代码如下:
for (variable in object)
statement
范例:
代码如下:
var obj = {
a: 1,
b: 2,
c: 3
};
for (var name in obj)
console.log(name);需要注意的是,我们通过hasOwnProperty方法来检查属性名是否属于该对象本身,而非从原型链(prototype chain,prototype将在下一篇中介绍)中继承而来:
代码如下:
for (var in obj) {
if (obj.hasOwnProperty(var)) {
// ...
}
}
函数返回与运算符详解
return语句
return语句用于让函数返回一个值。如果函数没有显式使用return,则返回undefined:
代码如下:
function f() { }
var v = f(); // v === undefined
?:条件操作符(JavaScript中唯一的三元操作符) ?:条件操作符在许多编程语言中都存在。当第一个操作数为真时,返回第二个操作数的值;否则返回第三个操作数的值。使用范例:
代码如下:
function abs() {
return x > 0 ? x : -x;
}
typeof操作符
typeof操作符用于获取变量的类型,其返回值包括:
1.'number' 2.'string' 3.'boolean' 4.'undefined' 5.'function' 6.'object'
特别地,typeof null返回的结果是'object'。关于typeof的范例:
代码如下:
var a = typeof 'hello'; // a === 'string'
var b = typeof null; // b === 'object'
+操作符
+操作符在JavaScript中既可用于加法运算,也可用于字符串连接:
代码如下:
var message = 'hello' + 'world'; // message === 'helloworld'
&&和||运算符
&&操作符在第一个操作数为假时返回第一个操作数的值,否则返回第二个操作数的值。 ||操作符在第一个操作数为真时返回第一个操作数的值,否则返回第二个操作数的值。
代码如下:
var a = 1 && true; // a === true
var b = 1 || false; // b === 1
||的一个习惯用法:
代码如下:
name = name || 'unknown'; // 为name设定默认值'unknown'在 NestJS 中使用管道验证数据与守卫控制访问权限
2026-11-05 12:43:41
Node.js后端生成高强度随机字符串的方法
2026-11-04 16:29:54
Node.js环境中怎么使用axios或http模块发送GET请求
2026-11-03 21:57:15
Node.js环境下怎么实现JS反混淆自动化?常用库与CLI工具推荐
2026-11-03 21:15:54
解决JS逆向常见报错:缺少DOM环境导致代码运行失败
2026-11-03 20:41:59
相关标签:
