变量
var num; // undefined
let num1, num2; // 声明多个变量
注:let 为 ES6 新增。
常量
const num = 42
虽然 const
关键字限定了栈上的内容不可编辑,但堆上的内容可以编辑,因此对于引用类型来说,要使堆上的内容不可编辑,需要额外使用 readonly
关键字:
const object1 = { property1: 1 };
const array1 = ["a", "b", "c"]
object1.property1 = 2;
array1[1] = "x";
注:const 为 ES6 新增。
命名
- 可以以任意 Unicode 字母(含中文),以及美元符号($)和下划线(_)开头。
- 非开头可以使用数字
注释
// 单行注释由两个左斜杆组成
/* 多行注释
由星号和左斜杆组成 */
JavaScript 同样支持 HTML 风格注释 <!-- HTML 风格注释 JS 版本
。
运算符
赋值
- 赋值:
=
- 先加后赋值:
+=
- 先减后赋值:
-=
- 先乘后赋值:
*=
- 先除后赋值:
/=
算术运算符
- 加减乘除:
+, -, *, /
- 取模(余数):
%
- 取幂:
**
- 自增:
++
- 自减:
--
自增和自检用在变量前是返回自增之后的值,用在变量之后将返回自增前的值。
字符串运算符
- 连接两边的字符串:
+
- 拼接字符串后在赋值给左侧变量:
+=
比较运算符
- 相等和不等:
==
!=
- 绝对相等和不等:
===
!==
- 大于和小于:
> <
- 大于或等于:
>=
- 小于或等于:
<=
===
和 !==
除了比较值之外,还对类型进行比较。
一元运算符
- -:负号
- +:加号,连接运算符
- typeof:
(typeof num)
// 输出:number - instanceof:判断对象是否是指定的类型,
obj instanceof number
(类似 Python isinstance() 方法)
三元运算符
condition ? expr1 : expr2
- expr1:condition 为 True 时执行
- expr2:condition 为 False 时执行
逻辑运算符
- and:
&&
- or:
||
- not:
!
类型运算符
- 返回变量类型:
typeof
- 检查变量是否为指定类型:
instanceof
流程控制
条件语句
if
const count = 42;
// 单行
if (count == 42) console.log("42")
if (count == 3){
// count 是 3 时执行
} else if (count == 4){
// count 是 4 时执行,可以有多个
} else {
// 其他情况下执行
}
switch
当执行语句有多行时,可以使用花括号标记范围,另外每个语句最后如果没有 break
语句,则会继续执行。
let today = 6
switch (today) {
case 1:
console.log("星期一");
break;
case 2:
console.log("星期二");
break;
case 6: {
console.log("星期六");
console.log("今天是休息日");
}
break;
case 7: {
console.log("星期日");
console.log("今天是休息日");
}
break;
}
另外 switch
语句中可以使用 default
关键字设定一个默认分支:
let today = 996;
switch (today) {
case 1:
case 2:
case 3:
case 4:
case 5:
console.log("工作日");
break;
case 6:
case 7:
console.log("休息日");
break;
default:
console.log("此星期不存在!");
break;
}
循环语句
- break:跳出循环;
- continue:跳过当前循环
for 循环
for (初始化语句; 条件; 递增表达式)
语句
// 或者
for (let i = 0; i < 5; i++){
console.log('i 当前为:' + i);
}
- 初始化:初始值,在循环开始之前执行的代码;
- 条件:每轮循环开始都执行一次,为
true
才继续; - 递增语句:循环的最后一个操作,通常用于递增变量
初始化语句和递增表达式都可以省略:
let i = 0
for (; i < 4; ) {
i++;
}
所有 for 循环都可以改成 while 循环。
while 循环
// 单行
while (true) console.log('无限循环');
while (true) {
// 无限循环
}
let i = 0;
while (i < 100) {
console.log('i 当前为:' + i);
i = i + 1;
}
do while 循环
do while 是 while 循环的变体,循环至少会执行一次。
do {
console.log("executed!"); //输出"executed!"
}
while (false);
数据类型
- 原始类型:
- boolean:布尔值
- number
- bigint
- string
- any
- unknown
- never
- 引用类型(复合)
- array:数组
- tuple:元组
- function:函数
- object:对象
- class:类型
- 进阶类型
- 泛型
- 类型别名
- 联合类型
- 交叉类型
- 联合类型写法:
string | number
原始数据类型
通常,数值、字符串、布尔值这三种类型,合称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。对象则称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于undefined和null,一般将它们看成两个特殊值。
TS 原始数据类型为 JS 的小写形式:
原始数据类型 | JavaScript | TypeScript |
---|---|---|
字符串 | String | string |
数值 | Number | number |
布尔值 | Boolean | boolean |
大整数 | BigInt | bigint |
符号 | Symbol | symbol |
不存在 | Null | null |
未定义 | Undefined | undefined |
// 字符串
const str: string = 'Hello'
// 字符串类型推导
const str = 'Hello'
ES6 新增两种类型:
- BigInt
- Symbol
TS 独有的三种特殊类型:
- any
- unknown
- never
字符串
字符串拼接的几种方式:
// 反引号
const number = 42
const luckyNumber = `我的幸运数字:${number}`