3.1语法
3.1.1 区分大小写
ECMAScript中一切都区分大小写
3.1.2标识符
标识符:变量、函数、属性和函数参数的名称
规则:
- 第一个字符:字母、下划线、美元符号($)
- 其余字符:字母、数字、下划线、美元符号($)
- xxxXxxxXxx(推荐使用形式)
3.1.3 注释
单行注释://
多行注释:/**/
3.1.4 严格模式
- ECMAScript3的一些不规范写法在这种模式下会被处理,对于不安全的活动将抛出错误。
- 启用严格模式:
"use strict";
1、放在函数体开头
2、一个预处理指令,任何支持JavaScript的引擎看到都会切换为严格模式。
3、这种语法形式的目的:不破坏ECMAScript3语法
4、现代浏览器都支持严格模式
3.1.5 语句
- 语句以分号结尾。
- 控制语句中推荐使用代码块,即使只有一句。
3.2 关键字与保留字
ES6规定的所有关键字:
ES6为将来保留的所有词汇:
3.3 变量
var 在所有版本的ES中都可以使用,而 const 和 let 只能在ES6以及更晚的版本中使用。
3.3.1 var关键字
var message;
- 不初始化的情况下,变量会保存一个特殊值undefined
- 一个变量可以赋上不同类型的值【不推荐】
(1)var声明作用域
- 成为包含它的函数的局部变量
- 省略var可以创建一个全局变量【不推荐】
- 严格模式下不能定义名为 eval 和 arguments 的变量
解释:按照规则,关键字作为语言保留,不能作标识符,严格模式下的保留字也有所不同。
(2)var 声明提升
- 使用var关键字声明的变量会自动提升到函数作用域顶部
<script>
function foo() {
console.log(age);
var age = 26;
}
foo(); // undefined
</script>
以上代码等价于
<script>
function foo() {
var age;
console.log(age);
age = 26;
}
foo(); // undefined
</script>
- 反复多次使用var声明同一个变量也没问题
可明多次不报错,而且不会覆盖之前的数值
3.3.2 let 声明
- 与 var 的作用差不多,最明显的区别:
(1)let 声明的范围是块作用域,而 var 声明的范围是函数作用域。
<script>
if (true) {
var name = 'Matt';
console.log(name); // Matt
}
console.log(name); // Matt
if (true) {
let age = 26;
console.log(age); // 26
}
console.log(age); // ReferenceError: age is not defined
</script>
(2)let 不允许同一个块作用域中出现冗余声明,会导致报错。
<script>
var name;
var name;
let age;
let age; // SyntaxError; identifier 'age' has already been declared
</script>
(3)嵌套使用相同的标识符不会报错,因为在同一个块中没有重复声明
<script>