JS语法速查手册,一遍过JS

JavaScript 核心语法速查手册

一、基础语法

1. 变量声明

```javascript

// ES5 (函数作用域)

var name = "张三"; // 可重复声明,会提升

// ES6+ (块级作用域)

let age = 25; // 可重新赋值,不可重复声明

const PI = 3.14; // 不可重新赋值,必须初始化

```

2. 数据类型

```javascript

// 原始类型 (7种)

typeof "string" // string

typeof 42 // number

typeof true // boolean

typeof undefined // undefined

typeof null // object (历史遗留)

typeof Symbol() // symbol

typeof 42n // bigint

// 引用类型

typeof {} // object

typeof [] // object

typeof function(){} // function

```

3. 类型转换

```javascript

// 显式转换

Number("123") // 123

String(123) // "123"

Boolean(1) // true

// 隐式转换

"5" + 2 // "52" (字符串连接)

"5" - 2 // 3 (数字运算)

!!value // 转布尔值

```

二、运算符

1. 算术运算符

```javascript

    • * / % ** // 加、减、乘、除、取模、幂

++ -- // 自增自减

```

2. 比较运算符

```javascript

== != // 宽松相等(会类型转换)

=== !== // 严格相等(推荐使用)

> < >= <= // 大小比较

```

3. 逻辑运算符

```javascript

&& || ! // 与、或、非

?? // 空值合并(ES2020)

?. // 可选链(ES2020)

```

4. 赋值运算符

```javascript

= += -= *= /= %= // 赋值

```

三、流程控制

1. 条件语句

```javascript

// if-else

if (condition) {

// 执行代码

} else if (condition2) {

// 执行代码

} else {

// 执行代码

}

// 三元运算符

condition ? expr1 : expr2;

// switch

switch (value) {

case 1:

// 代码

break;

case 2:

// 代码

break;

default:

// 代码

}

```

2. 循环语句

```javascript

// for 循环

for (let i = 0; i < 10; i++) {

// 循环体

}

// for...of (遍历可迭代对象)

for (const item of array) {

console.log(item);

}

// for...in (遍历对象属性)

for (const key in object) {

console.log(key, object[key]);

}

// while

while (condition) {

// 循环体

}

// do-while

do {

// 循环体

} while (condition);

```

3. 跳转语句

```javascript

break; // 跳出循环

continue; // 跳过本次循环

return; // 函数返回

```

四、函数

1. 函数定义

```javascript

// 函数声明 (会提升)

function add(a, b) {

return a + b;

}

// 函数表达式

const multiply = function(a, b) {

return a * b;

};

// 箭头函数 (ES6+)

const divide = (a, b) => a / b;

const sayHi = name => `Hello ${name}`;

const noArg = () => console.log('Hi');

// 参数默认值

function greet(name = 'Guest') {

return `Hello ${name}`;

}

// 剩余参数

function sum(...numbers) {

return numbers.reduce((a, b) => a + b, 0);

}

```

2. 高阶函数

```javascript

// 函数作为参数

function process(arr, fn) {

return arr.map(fn);

}

// 函数作为返回值

function createMultiplier(multiplier) {

return function(x) {

return x * multiplier;

};

}

```

五、对象

1. 对象创建

```javascript

// 字面量

const obj = {

name: '张三',

age: 25,

sayHi() {

console.log(`Hi, I'm ${this.name}`);

}

};

// 构造函数

function Person(name, age) {

this.name = name;

this.age = age;

}

Person.prototype.greet = function() {

console.log(`Hello, I'm ${this.name}`);

};

// Class (ES6)

class Person {

constructor(name, age) {

this.name = name;

this.age = age;

}

greet() {

console.log(`Hello, I'm ${this.name}`);

}

// 静态方法

static isPerson(obj) {

return obj instanceof Person;

}

}

```

2. 对象操作

```javascript

// 访问属性

obj.name // 点表示法

obj['name'] // 括号表示法

// 添加/修改属性

obj.email = 'test@example.com';

// 删除属性

delete obj.age;

// 检查属性

'name' in obj // true

obj.hasOwnProperty('name') // true (只检查自身属性)

Object.keys(obj) // 获取所有可枚举属性名

Object.values(obj) // 获取所有属性值

Object.entries(obj) // 获取所有键值对

```

六、数组

1. 数组创建

```javascript

const arr1 = [1, 2, 3]; // 字面量

const arr2 = new Array(5); // 长度为5的空数组

const arr3 = Array.from('hello'); // 从类数组创建

const arr4 = Array.of(1, 2, 3); // 创建包含参数的数组

```

2. 数组方法

```javascript

// 修改原数组

arr.push(item) // 末尾添加

arr.pop() // 末尾删除

arr.unshift(item) // 开头添加

arr.shift() // 开头删除

arr.splice(start, deleteCount, ...items) // 增删改

arr.reverse() // 反转

arr.sort((a, b) => a - b) // 排序

// 不修改原数组

arr.slice(start, end) // 切片

arr.concat(arr2) // 连接

arr.indexOf(item) // 查找索引

arr.includes(item) // 是否包含

arr.join(',') // 连接为字符串

// 迭代方法

arr.forEach((item, index) => {}) // 遍历

arr.map(item => item * 2) // 映射新数组

arr.filter(item => item > 0) // 过滤

arr.reduce((acc, cur) => acc + cur, 0) // 累积

arr.find(item => item.id === 1) // 查找元素

arr.findIndex(item => item.id === 1) // 查找索引

arr.every(item => item > 0) // 所有满足条件

arr.some(item => item > 0) // 至少一个满足

```

七、字符串

1. 常用方法

```javascript

// 基础操作

str.length // 长度

str[index] // 访问字符

str.charAt(index) // 访问字符

str.concat(str2) // 连接字符串

// 查找和截取

str.includes('sub') // 是否包含

str.indexOf('sub') // 查找位置

str.slice(start, end) // 切片

str.substring(start, end) // 子字符串

str.substr(start, length) // 子字符串

// 修改

str.trim() // 去除两端空格

str.toLowerCase() // 转小写

str.toUpperCase() // 转大写

str.replace('old', 'new') // 替换

str.split(',') // 分割为数组

str.repeat(3) // 重复

// 模板字符串 (ES6)

const name = '张三';

const greeting = `Hello, ${name}!`; // 支持插值、多行

```

八、异步编程

1. Promise

```javascript

// 创建Promise

const promise = new Promise((resolve, reject) => {

if (success) {

resolve(value);

} else {

reject(error);

}

});

// 使用Promise

promise

.then(value => {

// 成功处理

return processedValue;

})

.then(value => {

// 链式调用

})

.catch(error => {

// 错误处理

})

.finally(() => {

// 最终执行

});

// Promise静态方法

Promise.all([promise1, promise2]) // 全部成功

Promise.race([promise1, promise2]) // 第一个完成

Promise.any([promise1, promise2]) // 第一个成功

Promise.resolve(value) // 返回成功Promise

Promise.reject(error) // 返回失败Promise

```

2. Async/Await

```javascript

async function fetchData() {

try {

const response = await fetch(url);

const data = await response.json();

return data;

} catch (error) {

console.error('Error:', error);

}

}

```

九、模块化

1. ES6模块

```javascript

// 导出 (export.js)

export const name = '张三'; // 命名导出

export function add(a, b) { // 命名导出

return a + b;

}

export default class Person { // 默认导出

constructor(name) {

this.name = name;

}

}

// 导入 (import.js)

import Person from './export.js'; // 默认导入

import { name, add } from './export.js'; // 命名导入

import * as utils from './export.js'; // 全部导入

```

2. 常用API速查

DOM操作

```javascript

// 选择元素

document.getElementById('id')

document.querySelector('.class')

document.querySelectorAll('div')

// 修改内容

element.textContent = 'text'

element.innerHTML = '<span>HTML</span>'

element.setAttribute('attr', 'value')

// 样式操作

element.style.color = 'red'

element.classList.add('class')

element.classList.remove('class')

element.classList.toggle('class')

// 事件

element.addEventListener('click', handler)

element.removeEventListener('click', handler)

```

时间

```javascript

setTimeout(() => {}, 1000) // 延时执行

setInterval(() => {}, 1000) // 间隔执行

clearTimeout(timerId) // 清除定时器

clearInterval(timerId)

```

存储

```javascript

localStorage.setItem('key', value) // 本地存储

localStorage.getItem('key')

sessionStorage.setItem('key', value) // 会话存储

```

十、现代JavaScript特性

1. 解构赋值

```javascript

// 数组解构

const [first, second, ...rest] = arr;

// 对象解构

const { name, age, ...others } = obj;

const { name: userName } = obj; // 重命名

// 参数解构

function printUser({ name, age }) {

console.log(name, age);

}

```

2. 扩展运算符

```javascript

// 数组

const newArr = [...arr1, ...arr2];

const copyArr = [...arr];

// 对象

const newObj = { ...obj1, ...obj2 };

const copyObj = { ...obj };

```

3. 新增语法

```javascript

// 可选链操作符 (?.)

obj?.prop?.subProp

arr?.[0]

func?.(args)

// 空值合并运算符 (??)

const value = input ?? 'default';

// 大整数 (BigInt)

const bigNum = 9007199254740991n;

// 动态导入

import('./module.js').then(module => {

// 使用模块

});

```

十一、最佳实践提示

  1. **始终使用严格模式**: `'use strict';`

  2. **优先使用const,其次let,避免var**

  3. **使用===代替==**

  4. **使用模板字符串代替字符串拼接**

  5. **使用箭头函数保持this上下文**

  6. **使用解构和扩展运算符简化代码**

  7. **使用Promise/async-await处理异步**

  8. **使用可选链和空值合并处理空值**


**记住:** 实际工作80%的时间只用到20%的语法,重点是掌握核心概念并在实践中熟练运用。遇到问题查文档比死记硬背更高效。

相关推荐
子春一2 小时前
Flutter for OpenHarmony:构建一个 Flutter 天气卡片组件,深入解析动态 UI、响应式布局与语义化设计
javascript·flutter·ui
Remember_9933 小时前
Java 单例模式深度解析:设计原理、实现范式与企业级应用场景
java·开发语言·javascript·单例模式·ecmascript
写代码的【黑咖啡】3 小时前
Python 中的自然语言处理利器:NLTK
前端·javascript·easyui
可问春风_ren3 小时前
Vue3 入门详解:从基础到实战
开发语言·前端·javascript·vue.js·前端框架·ecmascript·edge浏览器
摘星编程3 小时前
用React Native开发OpenHarmony应用:NativeStack原生导航
javascript·react native·react.js
一起养小猫4 小时前
Flutter for OpenHarmony 实战:从零开发一款五子棋游戏
android·前端·javascript·flutter·游戏·harmonyos
想睡好4 小时前
ref和reactive
前端·javascript·vue.js
霁月的小屋4 小时前
React 闭包陷阱深度解析
前端·javascript·react.js
历程里程碑4 小时前
滑动窗口----滑动窗口最大值
javascript·数据结构·python·算法·排序算法·哈希算法·散列表