你不知道的JS(下):深入编程
本文是《你不知道的JavaScript(下卷)》的阅读笔记,第一部分:深入编程。 供自己以后查漏补缺,也欢迎同道朋友交流学习。
原文地址
代码与语句
程序是一组特定的计算机指令。指令的格式和组合规则被称为计算机语言(语法)。
语句
执行特定任务的一组单词、数字和运算符被称为语句。
a = b * 2;
a、b:变量2:字面值=、*:运算符- JS 语句通常以分号
;结尾。
表达式
语句由一个或多个表达式组成。表达式是对变量、值的引用,或者是其与运算符的组合。
执行程序
程序需要通过解释器或编译器翻译成计算机可理解的命令后执行。 JS 引擎实际上会即时编译(JIT)程序,然后立即执行编译后的代码。虽然 JS 常被称为解释型语言,但现代引擎的 JIT 过程使得其运行速度非常快。
实践环境
最简单的方法是使用浏览器(Chrome、Firefox 等)的开发者工具。
- 输出:
console.log()(控制台输出)或alert()(弹窗输出)。 - 输入:
prompt()(获取用户输入)。
运算符
JavaScript 常用运算符包括:
- 赋值:
=(将值保存在变量中)。 - 算术:
+、-、*、/、%(取模)。 - 复合赋值:
+=、-=、*=、/=(如a += 2等同于a = a + 2)。 - 递增/递减:
++(递增)、--(递减)。 - 对象属性访问:
.(如obj.a)或[](如obj["a"])。 - 相等:
==(宽松相等)、===(严格相等)。 - 逻辑:
&&(与)、||(或)、!(非),用于表示复合条件。
值与类型
在编程术语中,对值的不同表示方法称为类型。JavaScript 提供了以下内置基本类型:
- 数字 (number):用于数学计算。
- 字符串 (string):一个或多个字符组成的文本。
- 布尔值 (boolean):
true或false,用于决策判断。 - 除此之外,还提供 数组、对象、函数 等复合类型。
类型转换
JavaScript 提供显式和隐式两种类型转换机制。
var a = "42";
var b = Number(a); // 显式类型转换
console.log( a ); // "42"
console.log( b ); // 42
console.log( a == b ); // true,隐式类型转换(宽松相等)
代码注释
编写代码不仅是给计算机看,也是给开发者阅读。良好的注释能显著提高代码的可读性,解释器会忽略这些内容。
变量
变量是用于跟踪值变化的符号容器。JavaScript 采用动态(弱)类型机制,变量可以持有任意类型的值。
ES6 块作用域声明
除了传统的 var,ES6 引入了更强大的变量声明方式:
-
let声明:创建块级作用域变量。相比var,它解决了提升导致的逻辑混乱,并引入了“暂时性死区”(TDZ)。 -
const声明:用于创建只读常量。注意,const锁定的是变量的赋值,而不是值本身。const a = [1, 2, 3]; a.push( 4 ); // 成功!内容可以修改 console.log( a ); // [1, 2, 3, 4] a = 42; // TypeError! 赋值被锁定
模板字面量
ES6 引入了反引号 ( ` ) 界定的模板字面量,支持变量插值和多行字符串。
var name = "Kyle";
var greeting = `Hello ${name}!`; // 插值解析
var text = `
Now is the time
for all good men
`; // 支持多行
解构
解构是一种“结构化赋值”方法,可以从数组或对象中快速提取值。
var [ a, b, c ] = [1, 2, 3];
var { x, y } = { x: 10, y: 20 };
块与条件判断
块:使用 { .. } 将一系列语句组织在一起。
条件判断:最常用的是 if 语句,根据条件的真假决定是否执行后续代码块。
var bank_balance = 302.13;
var amount = 99.99;
if (amount < bank_balance) {
console.log( "I want to buy this phone!" );
}
循环
循环用于重复执行任务,每次执行被称为一次“迭代”。
while/do..while:根据条件循环。for:更紧凑的循环形式,包含初始化、测试条件和更新。
var i = 0;
while (true) {
if ((i <= 9) === false) {
break; // 停止循环
}
console.log(i);
i = i + 1;
}
for (var i = 0; i <= 9; i++) {
console.log( i );
}
函数
函数是可复用的代码片段,可以接受参数并返回值。
function printAmount(amt) {
console.log( amt.toFixed( 2 ) );
}
function formatAmount() {
return "$" + amount.toFixed( 2 );
}
var amount = 99.99;
printAmount( amount * 2 ); // "199.98"
amount = formatAmount();
console.log( amount ); // "$99.99"
作用域
在 JS 中,每个函数都有自己的作用域(词法作用域)。作用域是变量的集合及访问规则。
- 只有函数内部的代码才能访问该作用域中的变量。
- 作用域可以彼此嵌套:内层作用域可以访问外层作用域的变量,反之则不行。
小结
学习编程并不必然是复杂、费力的过程。我们需要熟悉几个基本的概念:
- 运算符:在值上执行动作。
- 值与类型:执行各种类型的动作需要值和类型,比如对数字进行数学运算,用字符串输出。
- 变量:在程序的执行过程中需要变量来保存数据(也就是状态)。
- 条件判断:需要 if 这样的条件判断来作出决策。
- 循环:需要循环来重复任务,直到不满足某个条件。
- 函数:需要函数将代码组织为逻辑上可复用的块。
在编程学习中,实践是绝对无法替代的。理论无法让你成为一个程序员,唯有动手尝试。