1. 基本语法规则
- 区分大小写:JavaScript 是大小写敏感的。
myVariable和myvariable会被视为两个不同的变量。 - 语句分隔:语句通常以分号
;结束。浏览器允许在某些情况下省略分号,但建议显式的添加分号,第一,避免潜在的错误或是代码压缩时产生问题;第二,在某些情况下有助于提升性能,不加分号解析器会尝试在合适的位置补上分号以纠正语法错误。 - 代码块:使用花括号
{}来定义代码块,比如if语句、循环和函数。就算代码块中只有一条语句,也建议使用{},这样能提高代码清晰度也能避免不必要的错误。
// 有效,但容易导致错误,应该避免
if (test)
console.log(test);
// 推荐
if (test) {
console.log(test);
}
- 注释:
- 单行注释:以
//开头。 - 多行注释:以
/*开头,以*/结尾。
- 严格模式:严格模式是一种不同的 JavaScript 解析和执行模型。 ECMAScript 3 的一些不规范写法在这种模式下会被处理,对于不安全的活动会抛出错误。 对整个脚本启用严格模式,可以在脚本开头加上这一行:
"use strict";//预处理指令
单独指定一个函数在严格模式下执行,可以把预处理指令放到函数体开头:
function doSomething() {
"use strict";
// 函数体
}
- 模块化:ES6 引入了模块系统,使用
import和export关键字来导入和导出模块,这有助于代码的组织和复用。
2. 标识符和命名
就是变量、函数、属性或函数参数的名称。
- 命名规则
- 第一个字符必须以字母、下划线
_或美元符号$开头。 - 后续字符可以是字母、数字、下划线或美元符号。
- 不能使用 JavaScript 的关键字和保留字(比如
if,let,function等)。
- 命名方式
- 最常见的命名方式是驼峰命名法(camelCase),第一个字母小写,后面的单词首字母大写,比如userName、userNameCode。
- 构造函数或类名通常使用帕斯卡命名法(PascalCase),也就是每个单词首字母都大写,比如MyClass。
- 常量通常全部大写,单词之间用下划线连接,比如MAX_SIZE。
变量与常量声明
在JavaScript中,可以使用var、let、来声明变量和const来声明常量。
- var:通过
var声明的变量会被提升到函数或全局代码顶部,具有函数作用域或全局作用域。 - let:在ES6 引入,通过
let声明的变量不存在变量提升,作用域由{}界定的跨级作用域,而且在声明前访问会报错,称为”暂时性死区“。 - const:和
let类似,只是const声明的是常量,而且必须初始化,不可以重新赋值,也就是说不可更改。但使用const 声明的对象或数组,可以修改内部的属性或元素。
推荐使用let和const代替var。const优先,let次之。
3. 数据类型
JavaScript 是动态类型语言,变量在声明时不需要指定类型,运行时可以改变。数据类型分为原始类型(基本类型)和引用类型(对象类型)。
- 原始数据类型(不可变)
- Undefined:变量已声明但未赋值。
- Null:空值或不存在的对象。
- Boolean:
true或false。 - Number:整数和浮点数。
- BigInt:用于表示任意精度的整数,在数字末尾加
n,如12345678901234567890n。 - String:文本数据,可用单引号
''、双引号""或反引号``(模板字符串)定义。 - Symbol:唯一值,常用于对象属性的键。
- 引用数据类型(对象,可变):
- Object:各种对象的基类。
- Array:数组是特殊的对象,用于表示有序列表。
- Function:函数也是对象。
- 其他:如
Date,RegExp,Map,Set等。
4. 类型转换
JavaScript在执行操作时会自动进行隐式类型转换。比如字符串与数字相加转换为字符串。
也可以使用Number(), String(), Boolean()等函数进行显式转换。
5. 运算符
- 算术运算符:
+,-,*,/,%(取模),**(指数幂)。 - 赋值运算符:
=,+=,-=,*=,/=,%=。 - 比较运算符:
<,>,<=,>=,==(相等,会进行类型转换),===(严格相等,推荐),!=,!==。 - 逻辑运算符:
&&(逻辑与),||(逻辑或),!(逻辑非)。支持短路求值。 - 三元运算符:
condition ? expr1 : expr2。
6. 流程控制
使用条件语句和循环语句来控制程序流程:
- 条件语句
if...else、else if:用于基于不同条件执行不同代码分支。switch:用于多条件分支选择,注意每个case后通常要加break防止穿透。
- 循环语句
for:传统计数循环。while:当条件为真时循环。do...while:至少执行一次循环体,再判断条件。for...of:遍历可迭代对象(如数组、字符串、Map、Set)的值。for...in:遍历对象的可枚举属性(通常包括原型链上的),不推荐使用for...in遍历数组。
7. 函数定义
函数是 JavaScript 的一等公民。
- 函数声明:
function functionName(parameters) { // 函数体 }。 - 函数表达式:
const functionName = function(parameters) { // 函数体 }。 - 箭头函数:
const functionName = (parameters) => { // 函数体 }或const functionName = parameter => expression。
8. 对象与数组
- 对象:是键值对的集合。可以使用字面量
{}创建,属性键可以是字符串或 Symbol,值可以是任何类型。 - 数组:是有序的数据集合。可以使用字面量
[]创建,数组元素可以是任何类型,并且数组有很多内置方法(如push,pop,map,filter,reduce等)。
8. 建议
- 始终使用
let和const,避免使用var。 - 使用严格相等运算符
===和!==。 - 总是使用分号
; 明确结束语句。 - 即使代码块只有一条语句,也使用花括号
{}。 - 为变量和函数使用描述性的名称并遵循命名惯例。
- 合理使用注释解释复杂的逻辑。
- 注意隐式类型转换可能带来的陷阱。
- 考虑使用严格模式。