Skip to main content

语法

标识符

标识符指的是用来识别各种值的合法名称

  • 第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_
  • 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字 0-9

JavaScript 有一些保留字,不能用作标识符

变量

声明

  • let。声明块级作用域的变量
  • const。声明不可变的常量,但实际上如果声明一个对象,这个对象本身还是可以修改属性的
  • var。声明函数作用域的变量

var 会存在变量声明提升,letconst 则不存在变量声明提升

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.aobject["a"])
  • /ab+c/i。正则表达式
  • {}。对象初始化
  • []。数组初始化

运算符

  • 算术 +-*/%
  • 赋值 =
  • 复合,如 +=-=*=/=
  • 自增减++--
  • 比较 ><<=>===!====!==
  • 逻辑 &&||!??
  • 三元 ?:
  • 展开运算符 ...obj

+ 有一些额外的作用:

  • 连接字符串(5+'')
  • 转换为 Number(+'5'+false)

&&|| 也有一些额外的作用

  • 短路逻辑 let name = a || 'default'

以上只是罗列了一些常用表达式和运算符,更详细的参考 表达式和运算符

语句

  • 条件 if/else if/elseswitch
  • 循环 forwhiledo-whilefor...inlabelbreakcontinue
  • 异常捕获 try/catch/finally

注释

  • 单行 //
  • 多行 /** **/