Js基础扫盲

在日常的前端开发中,JavaScript无疑是核心技术之一。JavaScript语言的灵活性和表现力,让它在各种前端场景下展现出惊人的活力和创造力。JavaScript的每一个特性都可以用来解锁前端的新姿态,恰当运用这些技巧,不仅可以提高代码的效率,还能令阅读者和使用者眼前一亮。

以下便是JavaScript(JS)中值得关注的30个用法,每个用法均有示例代码进行展示,以期能让代码效率和可读性得到提升。

1. 默认参数值

在ES6以前,若函数参数未传值则默认为undefined,但现在可以设置默认参数值。

javascript 复制代码
function greeting(name = "Anonymous") {
    return `Hello, ${name}!`;
}
console.log(greeting("Alice")); // "Hello, Alice!"
console.log(greeting());        // "Hello, Anonymous!"

2. 模板字符串

用反引号( )和${}`,可以轻松拼接字符串和变量。

javascript 复制代码
const user = 'Jane';
console.log(`Hi, ${user}!`); // "Hi, Jane!"

3. 多行字符串

使用反引号,可直接创建多行字符串。

javascript 复制代码
const multiLine = `This is a string
that spans across
multiple lines.`;
console.log(multiLine);

4. 解构赋值

快速提取数组或对象中的值。

javascript 复制代码
const [a, b] = [1, 2];
const { x, y } = { x: 10, y: 20 };
console.log(a, b); // 1 2
console.log(x, y); // 10 20

5. 展开运算符

用于数组或对象中创建副本或合并。

javascript 复制代码
const numbers = [1, 2, 3];
const newNumbers = [...numbers, 4, 5];
console.log(newNumbers); // [1, 2, 3, 4, 5]

6. 剩余参数

函数可以接受不定数量的参数,作为一个数组。

javascript 复制代码
function sum(...args) {
    return args.reduce((total, current) => total + current, 0);
}
console.log(sum(1, 2, 3)); // 6

7. 箭头函数

更简洁的函数写法,自动绑定上下文 this

javascript 复制代码
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5

8. Promise 和异步

处理异步操作,支持链式调用。

javascript 复制代码
const fetchData = () => new Promise(resolve => setTimeout(() => resolve("Data"), 1000));
fetchData().then(data => console.log(data)); // "Data"

9. Async/Await

使异步代码看起来更像同步代码。

javascript 复制代码
const fetchData = async () => {
    const data = await new Promise(resolve => setTimeout(() => resolve("Data"), 1000));
    console.log(data);
};
fetchData();

10. 对象属性简写

创建对象时,若键和变量名相同,可省略键。

javascript 复制代码
const name = "Alice";
const age = 25;
const user = { name, age };
console.log(user); // { name: "Alice", age: 25 }

11. 计算属性名

在对象字面量中使用表达式作为属性名。

javascript 复制代码
const propName = "name";
const user = {
  [propName]: "Alice",
};
console.log(user.name); // "Alice"

12. 函数参数解构

直接在参数位置上解构对象或数组。

javascript 复制代码
function greet({ name, age }) {
    console.log(`Hello, my name is ${name} and I'm ${age} years old.`);
}
greet({ name: "Alice", age: 30 });

13. 对象方法简写

对象中的函数可以省略function关键字。

javascript 复制代码
const calculator = {
    add(a, b) {
        return a + b;
    },
};
console.log(calculator.add(2, 3)); // 5

14. 导入/导出模块

模块化JavaScript代码,让结构更清晰。

javascript 复制代码
// math.js
export function add(a, b) { return a + b; }

// main.js
import { add } from './math.js';
console.log(add(2, 3)); // 5

15. 类与构造函数

ES6引入了类的概念,使得面向对象编程更为直观。

javascript 复制代码
class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    
    greet() {
        console.log(`Hello, my name is ${this.name}!`);
    }
}

const person = new Person('Alice', 30);
person.greet(); // "Hello, my name is Alice!"

16. 类的继承

类可以通过extends关键字继承其他类。

javascript 复制代码
class Animal {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`${this.name} makes a noise.`);
    }
}

class Dog extends Animal {
    constructor(name) {
        super(name);
    }
    speak() {
        console.log(`${this.name} barks.`);
    }
}

const dog = new Dog('Rex');
dog.speak(); // "Rex barks."

17. Set集合

用于创建无重复值的集合。

javascript 复制代码
const mySet = new Set([1, 2, 3, 2, 1]);
console.log(mySet); // Set {1, 2, 3}

18. Map映射

类似于对象,但键的范围不限于字符串。

javascript 复制代码
const myMap = new Map();
myMap.set('a', 1);
myMap.set('b', 2);
console.log(myMap.get('a')); // 1

19. Array.from

将类数组或可迭代对象转换为数组。

javascript 复制代码
const nodeList = document.querySelectorAll('div');
const nodeArray = Array.from(nodeList);
console.log(nodeArray); // [div, div, ...]

20. Array.find & findIndex

查找数组中满足条件的第一个元素及其索引。

javascript 复制代码
const numbers = [5, 12, 8, 130, 44];
const found = numbers.find(number => number > 10);
console.log(found); // 12

21. 对象的entries方法

返回一个对象所有的键值对数组。

javascript 复制代码
const user = { name: 'Alice', age: 25 };
const entries = Object.entries(user);
console.log(entries); // [["name", "Alice"], ["age", 25]]

22. 对象的keys和values方法

分别获取对象的所有键或所有值。

javascript 复制代码
const user = { name: 'Alice', age: 25 };
const keys = Object.keys(user);
const values = Object.values(user);
console.log(keys); // ["name", "age"]
console.log(values); // ["Alice", 25]

23. 对象的fromEntries方法

将键值对列表转换为对象。

javascript 复制代码
const entries = [['name', 'Alice'], ['age', 25]];
const user = Object.fromEntries(entries);
console.log(user); // { name: "Alice", age: 25 }

24. 对象和数组的深拷贝

使用JSON方法进行对象和数组的深拷贝。

javascript 复制代码
const user = { name: 'Alice', age: 25 };
const userCopy = JSON.parse(JSON.stringify(user));
console.log(userCopy); // { name: "Alice", age: 25 }

25. 可选链操作符

安全地访问深层次对象属性,避免引起错误。

javascript 复制代码
const user = { name: 'Alice', address: { city: 'Wonderland' } };
console.log(user.address?.city); // "Wonderland"
console.log(user.address?.postcode); // undefined

26. 空值合并操作符

在左侧操作数为nullundefined时,返回右侧操作数。

javascript 复制代码
const nullValue = null;
const defaultValue = nullValue ?? 'default';
console.log(defaultValue); // "default"

27. Symbol类型

创建唯一标识符,用于对象属性以避免冲突。

javascript 复制代码
const symbol = Symbol('description');
console.log(symbol); // Symbol(description)

28. for...of 循环

用于遍历可迭代对象(如数组、Map、Set等)。

javascript 复制代码
const numbers = [1, 2, 3];
for (const number of numbers) {
    console.log(number);
}
// 1
// 2
// 3

29. for...in 循环

遍历对象的自身和继承的可枚举属性。

javascript 复制代码
const user = { name: 'Alice', age: 25 };
for (const key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(`${key}: ${user[key]}`);
    }
}
// "name: Alice"
// "age: 25"

30. strict模式

可通过"use strict"指令开启严格模式,提高代码的严谨性。

javascript 复制代码
'use strict';
let undefinedVariable; // 未定义变量会抛出错误
相关推荐
Dnui_King4 分钟前
Oracle 在线重定义
java·服务器·前端
西柚啊15 分钟前
AI + 可视化:Stagewise 如何让前端 UI 调试效率飞跃
前端·ai编程
中微子17 分钟前
解决跨域问题的古早方法JSONP
前端
嘉琪00119 分钟前
2025——js面试题(9)——开发环境相关
开发语言·javascript·ecmascript
林太白35 分钟前
Rust详情修改删除优化
前端·后端·rust
HANK40 分钟前
前端自动化部署全流程实战指南
前端
Neon120442 分钟前
Nuxt.js 国际化配置完整教程(含版本兼容与问题解决)
前端·nuxt.js
薛定谔的算法44 分钟前
React 项目骨架把“一万行灾难”拆成“百来个各司其职的小文件”
前端·react.js·前端框架
Keya1 小时前
鸿蒙开发样式复用:@Styles、@Extend与AttributeModifier深度对比
前端·分布式·harmonyos
拉不动的猪1 小时前
JS篇之性能优化
前端·javascript·面试