7 JavaScript基础概念

7 JavaScript基础概念

变量和数据类型

在JavaScript中,变量用于存储数据,主要有三种关键字可以用来声明变量:varletconst

  • var:函数作用域或全局作用域,可以被重新声明和赋值。
  • let:块作用域,可以被重新赋值但不能重新声明。
  • const:块作用域,声明后不可重新赋值。

示例

1
2
3
4
5
6
var name = "Alice"; // 使用 var 声明变量
let age = 25; // 使用 let 声明变量
const pi = 3.14; // 使用 const 声明常量

age = 26; // 允许重新赋值
// pi = 3.14159; // 报错:不能重新赋值

JavaScript的数据类型主要分为基本数据类型和引用数据类型。基本数据类型包括:

  • Number:数字类型,例如423.14
  • String:字符串类型,例如"Hello"
  • Boolean:布尔类型,例如truefalse
  • Undefined:未定义类型
  • Null:空类型
  • Symbol:唯一值类型(ES6引入)
  • BigInt:大整数类型(ES11引入)

引用数据类型包括:

  • Object:对象类型
  • Array:数组类型
  • Function:函数类型

控制结构

JavaScript提供了多种控制结构,包括条件语句和循环。

条件语句

使用if...else语句来进行条件判断。

1
2
3
4
5
6
7
8
9
let score = 85;

if (score >= 90) {
console.log("优秀");
} else if (score >= 75) {
console.log("良好");
} else {
console.log("待提高");
}

循环

常见的循环结构有for循环和while循环。

for循环

1
2
3
for (let i = 0; i < 5; i++) {
console.log("第 " + i + " 次循环");
}

while循环

1
2
3
4
5
let i = 0;
while (i < 5) {
console.log("第 " + i + " 次循环");
i++;
}

函数

函数是JavaScript的基本构建块。可以通过函数声明、函数表达式或箭头函数来定义。

函数声明

1
2
3
4
5
function greet(name) {
return "Hello, " + name;
}

console.log(greet("Bob")); // Hello, Bob

函数表达式

1
2
3
4
5
const add = function(x, y) {
return x + y;
};

console.log(add(5, 10)); // 15

箭头函数

1
2
3
const multiply = (x, y) => x * y;

console.log(multiply(5, 10)); // 50

数组和对象

数组

数组是一种特殊的对象,用于存储多个值。

1
2
let fruits = ["apple", "banana", "orange"];
console.log(fruits[0]); // apple

可以使用内置方法处理数组,如pushpop

1
2
3
4
fruits.push("grape"); // 添加元素
console.log(fruits); // ["apple", "banana", "orange", "grape"]
fruits.pop(); // 移除最后一个元素
console.log(fruits); // ["apple", "banana", "orange"]

对象

对象是一种键值对的集合,用于结构化存储数据。

1
2
3
4
5
6
7
8
9
10
let person = {
name: "Alice",
age: 30,
greet: function() {
console.log("Hello, " + this.name);
}
};

console.log(person.name); // Alice
person.greet(); // Hello, Alice

总结

本节介绍了JavaScript的基础概念,包括变量声明、数据类型、控制结构、函数、数组和对象。这些是学习Node.js的基础,掌握它们能够帮助你更好地理解和使用Node.js。

8 Node.js变量与数据类型

8 Node.js变量与数据类型

在Node.js中,变量用于存储数据值,而数据类型则定义了这些值的种类和性质。理解变量与数据类型是学习Node.js的基础。

变量的声明

在Node.js中,我们可以使用varletconst来声明变量。

  • var:功能强大,但存在全局作用域或函数作用域的问题,容易导致变量提升(hoisting)。
  • let:用于声明块级作用域的变量,避免了var的作用域问题。
  • const:用于声明常量,一旦赋值后不能再被改变。

示例代码

1
2
3
4
5
6
7
var name = "Alice"; // 使用 var 声明变量
let age = 25; // 使用 let 声明变量
const country = "China"; // 使用 const 声明常量

name = "Bob"; // 可以重新赋值
age = 26; // 可以重新赋值
// country = "USA"; // 这行会报错,因为常量不能被重新赋值

数据类型

Node.js支持多种数据类型,这些数据类型可以分为两类:原始数据类型和引用数据类型。

1. 原始数据类型

  • String:字符串类型,用于表示文本数据。
  • Number:数字类型,表示整数或浮点数。
  • Boolean:布尔类型,表示truefalse
  • Undefined:表示变量未被赋值。
  • Null:表示空值。
  • Symbol:表示唯一值,主要用于对象属性的唯一性。
  • BigInt:用于表示任意精度的整数。

示例代码

1
2
3
4
5
6
7
let greeting = "Hello, World!";  // String
let count = 42; // Number
let isActive = true; // Boolean
let score; // Undefined
let emptyValue = null; // Null
let uniqueId = Symbol("id"); // Symbol
let largeNumber = 12345678901234567890n; // BigInt

2. 引用数据类型

引用数据类型主要包括对象(Object)和数组(Array)。它们可以存储多个值。

  • 对象是键值对的集合。
  • 数组是有序的数据集合。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 对象
let person = {
name: "Alice",
age: 25,
country: "China"
};

// 数组
let fruits = ["apple", "banana", "orange"];

// 操作对象属性
console.log(person.name); // 输出: Alice
person.age = 26; // 修改属性

// 操作数组元素
console.log(fruits[0]); // 输出: apple
fruits.push("grape"); // 添加新元素

数据类型的判断

在Node.js中,可以使用typeof运算符来检测变量的数据类型。对于对象和数组,可以使用Array.isArray()来判断。

示例代码

1
2
3
4
5
console.log(typeof name); // 输出: string
console.log(typeof count); // 输出: number
console.log(typeof isActive); // 输出: boolean
console.log(typeof person); // 输出: object
console.log(Array.isArray(fruits)); // 输出: true

总结

了解Node.js中的变量与数据类型是掌握JavaScript和Node.js的重要一步。通过合理使用不同类型的变量,可以提高代码的可读性和可维护性。在编写程序时,请注意选择合适的变量声明方式以及数据类型,以提升代码的质量和执行效率。

9 Node.js 控制流与函数

9 Node.js 控制流与函数

在Node.js中,控制流函数是编程的重要组成部分。理解这些概念对编写高效的Node.js代码至关重要。下面我们将详细探讨这两个主题。

控制流

控制流决定了代码的执行顺序。在Node.js中,常见的控制流机制包括条件语句、循环和异步控制。

条件语句

ifelse ifelse是条件语句的基本结构。例如,我们可以使用条件语句来检查用户输入:

1
2
3
4
5
6
7
8
9
const userInput = 25;

if (userInput < 18) {
console.log('未成年人');
} else if (userInput < 65) {
console.log('成年人');
} else {
console.log('老年人');
}

循环

在Node.js中,我们常用forwhile循环来处理重复任务。例如,遍历一个数组:

1
2
3
4
5
const fruits = ['苹果', '香蕉', '橙子'];

for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}

异步控制流

Node.js是异步的,因此理解异步控制流非常重要。常见的异步控制流机制包括回调、Promise和async/await。

回调函数

回调函数是最基本的异步处理方式。例如:

1
2
3
4
5
6
7
8
9
function fetchData(callback) {
setTimeout(() => {
callback('数据加载完成');
}, 1000);
}

fetchData((data) => {
console.log(data);
});

Promise

Promise提供了一种更优雅的方式处理异步操作:

1
2
3
4
5
6
7
8
9
10
11
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('数据加载完成');
}, 1000);
});
}

fetchData().then(data => {
console.log(data);
});

async/await

asyncawait是对Promise的语法糖,使异步代码更具可读性:

1
2
3
4
5
6
7
8
9
10
11
12
async function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('数据加载完成');
}, 1000);
});
}

(async () => {
const data = await fetchData();
console.log(data);
})();

函数

函数是JavaScript的一个核心概念,Node.js也不例外。通过使用函数,我们可以提高代码的可重用性与可维护性。

创建函数

在JavaScript中,有多种创建函数的方式,其中包括函数声明、函数表达式和箭头函数。

函数声明

1
2
3
4
5
function greet(name) {
return `你好,${name}`;
}

console.log(greet('小白')); // 输出:你好,小白

函数表达式

1
2
3
4
5
const greet = function(name) {
return `你好,${name}`;
};

console.log(greet('小白')); // 输出:你好,小白

箭头函数

箭头函数提供了更简洁的语法:

1
2
3
const greet = (name) => `你好,${name}`;

console.log(greet('小白')); // 输出:你好,小白

函数参数

JavaScript支持默认参数和剩余参数。例如:

1
2
3
4
5
6
function multiply(a, b = 1) {
return a * b;
}

console.log(multiply(5)); // 输出:5 (因为b为默认值1)
console.log(multiply(5, 2)); // 输出:10

函数作用域

函数的作用域决定了哪些变量可以在函数内部访问。示例:

1
2
3
4
5
6
7
8
9
const outerVar = '我在外部';

function myFunction() {
const innerVar = '我在内部';
console.log(outerVar); // 访问外部变量
console.log(innerVar); // 访问内部变量
}

myFunction();

高阶函数

高阶函数是指接受函数作为参数或返回函数的函数。例如:

1
2
3
4
5
6
7
8
function createGreeting(greeting) {
return function(name) {
return `${greeting}${name}`;
};
}

const sayHello = createGreeting('你好');
console.log(sayHello('小白')); // 输出:你好,小白

小结

在Node.js中,控制流函数是编写程序不可或缺的部分。合理运用条件语句循环以及异步控制流能够优化程序执行的顺序,而良好的函数设计则能提升代码的重用性和可读性。这些基础知识为进一步学习Node.js奠定了良好的基础。