语法
标识符
标识符指的是用来识别各种值的合法名称
- 第一个字符,可以是任意 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()
中.
的优先级高于new
new 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
注释
- 单行
//
- 多行
/** **/