JavaScript的语言规则

57 阅读5分钟

1. 基本语法规则

  1. 区分大小写:JavaScript 是大小写敏感的。myVariable和 myvariable会被视为两个不同的变量。
  2. 语句分隔:语句通常以分号 ;结束。浏览器允许在某些情况下省略分号,但建议显式的添加分号,第一,避免潜在的错误或是代码压缩时产生问题;第二,在某些情况下有助于提升性能,不加分号解析器会尝试在合适的位置补上分号以纠正语法错误。
  3. 代码块:使用花括号 {}来定义代码块,比如if语句、循环和函数。就算代码块中只有一条语句,也建议使用 {},这样能提高代码清晰度也能避免不必要的错误。
// 有效,但容易导致错误,应该避免 
if (test)  
 console.log(test);  
// 推荐 
if (test) {  
 console.log(test);  
} 
  1. 注释
  • 单行注释:以 //开头。
  • 多行注释:以 /*开头,以 */结尾。
  1. 严格模式:严格模式是一种不同的 JavaScript 解析和执行模型。 ECMAScript 3 的一些不规范写法在这种模式下会被处理,对于不安全的活动会抛出错误。 对整个脚本启用严格模式,可以在脚本开头加上这一行:
"use strict";//预处理指令

单独指定一个函数在严格模式下执行,可以把预处理指令放到函数体开头:

function doSomething() {  
 "use strict";  
 // 函数体  
} 
  1. 模块化:ES6 引入了模块系统,使用 import和 export关键字来导入和导出模块,这有助于代码的组织和复用。

2. 标识符和命名

就是变量、函数、属性或函数参数的名称。

  1. 命名规则
  • 第一个字符必须以字母、下划线 _或美元符号 $开头。
  • 后续字符可以是字母、数字、下划线或美元符号。
  • 不能使用 JavaScript 的​​关键字​​和​​保留字​​(比如 ifletfunction等)。
  1. 命名方式
  • 最常见的命名方式是驼峰命名法(camelCase),第一个字母小写,后面的单词首字母大写,比如userName、userNameCode。
  • 构造函数或类名通常使用帕斯卡命名法​​(PascalCase),也就是每个单词首字母都大写,比如MyClass。
  • 常量通常全部大写,单词之间用下划线连接,比如MAX_SIZE。

变量与常量声明

在JavaScript中,可以使用var、let、来声明变量和const来声明常量。

  • var:通过var声明的变量会被提升到函数或全局代码顶部,具有函数作用域或全局作用域。
  • let:在ES6 引入,通过let声明的变量不存在变量提升,作用域由{}界定的跨级作用域,而且在声明前访问会报错,称为”暂时性死区“。
  • const:和let类似,只是const声明的是常量,而且必须初始化,不可以重新赋值,也就是说不可更改。但使用const 声明的对象或数组,可以修改内部的属性或元素。

推荐使用letconst代替varconst优先,let次之。

3. 数据类型

JavaScript 是​​动态类型​​语言,变量在声明时不需要指定类型,运行时可以改变。数据类型分为​​原始类型​​(基本类型)和​​引用类型​​(对象类型)。

  1. 原始数据类型(不可变)
  • Undefined​​:变量已声明但未赋值。
  • Null​​:空值或不存在的对象。
  • Boolean​​:true或 false
  • ​Number​​:整数和浮点数。
  • ​BigInt​​:用于表示任意精度的整数,在数字末尾加 n,如 12345678901234567890n
  • ​String​​:文本数据,可用单引号 ''、双引号 ""或反引号 ``(模板字符串)定义。
  • Symbol​​:唯一值,常用于对象属性的键。
  1. ​引用数据类型​​(对象,可变):
  • ​Object​​:各种对象的基类。
  • ​Array​​:数组是特殊的对象,用于表示有序列表。
  • ​Function​​:函数也是对象。
  • 其他:如 DateRegExpMapSet等。

4. 类型转换

JavaScript在执行操作时会自动进行隐式类型转换。比如字符串与数字相加转换为字符串。 也可以使用Number()String()Boolean()等函数进行​​显式转换

5. 运算符

  • ​算术运算符​​:+-*/%(取模), **(指数幂)。
  • ​赋值运算符​​:=+=-=*=/=%=
  • ​比较运算符​​:<><=>===(相等,会进行类型转换), ===(严格相等,推荐), !=!==
  • ​逻辑运算符​​:&&(逻辑与), ||(逻辑或), !(逻辑非)。支持​​短路求值​​。
  • ​三元运算符​​:condition ? expr1 : expr2

6. 流程控制

使用条件语句和循环语句来控制程序流程:

  1. 条件语句
  • if...elseelse if:用于基于不同条件执行不同代码分支。
  • switch:用于多条件分支选择,注意每个 case后通常要加 break防止穿透。
  1. 循环语句
  • 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,值可以是任何类型。
  • ​数组​​:是有序的数据集合。可以使用字面量 []创建,数组元素可以是任何类型,并且数组有很多内置方法(如 pushpopmapfilterreduce等)。

8. 建议

  1. ​始终使用 let和 const​,避免使用 var
  2. ​使用严格相等运算符 ===和 !==​。
  3. ​总是使用分号 ;​ 明确结束语句。
  4. 即使代码块只有一条语句,也​​使用花括号 {}​。
  5. 为变量和函数使用​​描述性的名称​​并遵循命名惯例。
  6. 合理使用​​注释​​解释复杂的逻辑。
  7. 注意​​隐式类型转换​​可能带来的陷阱。
  8. 考虑使用​​严格模式​​。