语法
标识符
标识符指的是用来识别各种值的合法名称
- 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)
- 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字 0-9
JavaScript 有一些保留字,不能用作标识符
变量
声明
let。声明块级作用域的变量const。声明不可变的常量,但实际上如果声明一个对象,这个对象本身还是可以修改属性的var。声明函数作用域的变量
var 会存在变量声明提升,let、const 则不存在变量声明提升
let/const 在进入块级作用域后,会因为提升的原因先创建,但不会被初始化,直到声明语句执行的时候才被初始化,初始化的时候如果使用 let 声明的变量没有赋值,则会默认赋值为 undefined,而 const 必须在初始化的时候赋值。而创建到初始化之间的代码片段就形成了暂时性死区
Q&A
下面的输出,如何正确输出 1-5
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0);
}
关键字
- this。指向函数的执行上下文
- function。定义函数
- class。定义类
- async function。 定义一个异步函数表达式
- await。暂停或恢复执行异步函数,并等待
promise的resolve/reject回调 - new。创建构造函数实例
.和 new 的优先级 new 后边紧跟对象,new 的优先级低;new 后边紧跟构造函数执行,new 的优先级高
new Foo.getName()中.的优先级高于newnew Foo().getName()中new Foo()优先级更高
表达式
- 属性访问符(
obj.a、object["a"]) - /ab+c/i。正则表达式
- {}。对象初始化
- []。数组初始化
运算符
- 算术
+、-、*、/和% - 赋值
= - 复合,如
+=、-=、*=、/= - 自增减
++、-- - 比较
>、<、<=、>=、==、!=、===、!== - 逻辑
&&、||、!、?? - 三元
?: - 展开运算符
...obj
+ 有一些额外的作用:
- 连接字符串(
5+'') - 转换为 Number(
+'5'、+false)
&& 和 || 也有一些额外的作用
- 短路逻辑
let name = a || 'default'
以上只是罗列了一些常用表达式和运算符,更详细的参考 表达式和运算符
语句
- 条件
if/else if/else、switch - 循环
for、while、do-while、for...in、label、break、continue - 异常捕获
try/catch/finally
注释
- 单行
// - 多行
/** **/