JavaScript极简入门教程(一):基础篇

作者:夜航船时间:2026-10-28 15:16:17浏览:571

本文面向具备其他编程语言经验的开发者,精选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'
作者最新文章