发布于 2026-01-05 0 阅读
0

JavaScript 18 及更高版本中 25 个不易察觉的特性,更像是人们绝对应该了解的新特性。DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

JavaScript 的 25 个不易察觉的特性

18 及以后的内容更像是人们绝对应该了解的新功能。

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

作为开发人员,我们经常编写类似类型的代码,陷入一种模式,这种模式虽然很舒适,但有时会让人感到单调乏味。

然而,JavaScript 的世界浩瀚无垠,充满了高级功能,一旦发现并加以利用,就能将我们的开发工作转变为更加激动人心、更有成就感的事情。

在本指南中,我们将揭示 25 个高级 JavaScript 功能,这些功能不仅能展现这些隐藏的瑰宝,还能将您对 JavaScript 的掌握提升到前所未有的水平。

让我们携手踏上这段探索之旅,将 JavaScript 的高级功能融入我们的编码体系,打造更高效、更优雅、更强大的应用程序。是时候为我们的开发工作注入全新的乐趣和创造力了。

1 — 循环语句和代码块语句的标签

JavaScript 允许给循环和代码块添加标签,从而实现精确控制breakcontinue

outerLoop: for (let i = 0; i < 5; i++) {
    innerLoop: for (let j = 0; j < 5; j++) {
        if (i === 2 && j === 2) break outerLoop;
        console.log(`i=${i}, j=${j}`);
    }
}
Enter fullscreen mode Exit fullscreen mode

2 — 逗号运算符

逗号运算符允许按顺序计算多个表达式,并返回最后一个表达式的结果。

let a = (1, 2, 3); // a = 3
Enter fullscreen mode Exit fullscreen mode

3 — 超越字符串格式化的标记模板字面量

除了创建字符串之外,带标签的模板还可以用于 DSL(领域特定语言)、清理用户输入或本地化。

function htmlEscape(strings, ...values) {
    // Example implementation
}
Enter fullscreen mode Exit fullscreen mode

4 — 代码块内的函数声明

虽然不建议这样做,但 JavaScript 允许在代码块内声明函数,这可能会导致在非严格模式下出现不同的行为。

if (true) {
    function test() { return "Yes"; }
} else {
    function test() { return "No"; }
}
test(); // Behavior varies depending on the environment
Enter fullscreen mode Exit fullscreen mode

5 — 虚空操作员

void运算符会计算任何表达式,然后返回 undefined,这对于 JavaScript 中的超链接非常有用。

void (0); // returns undefined
Enter fullscreen mode Exit fullscreen mode

6 — 位运算符用于快速计算

位运算符(如|&)可以更快地执行某些数学运算,但代价是代码可读性降低。

let floor = 5.95 | 0; // Fast way to do Math.floor(5.95)
Enter fullscreen mode Exit fullscreen mode

7 — 使用对象操作语句

with语句会扩展代码块的作用域链,从而允许你编写更短的代码。但是,出于可读性和性能方面的考虑,不建议这样做。

with(document.getElementById("myDiv").style) {
    background = "black";
    color = "white";
}
Enter fullscreen mode Exit fullscreen mode

Christian Heilmann 在 Skillshare 开设的 JavaScript 开发课程

通过 Christian Heilmann 的课程提升您的 JavaScript 技能——立即开始编写更简洁、更快速、更优质的代码!

8 — 自动分号插入 (ASI)

JavaScript 会尝试修复缺失的分号,但依赖它可能会导致意想不到的结果。

let x = 1
let y = 2
[x, y] = [y, x] // Without proper semicolons, this could fail
Enter fullscreen mode Exit fullscreen mode

9 — 物业检查操作员

检查对象是否具有某个属性,而不直接访问其值。

"toString" in {}; // true
Enter fullscreen mode Exit fullscreen mode

10 — instanceof 与 typeof

instanceof检查原型链,同时typeof返回一个字符串,指示未求值操作数的类型。

function Person() {}
let person = new Person();
console.log(person instanceof Person); // true
console.log(typeof person); // "object"
Enter fullscreen mode Exit fullscreen mode

11 — ES6 中的块级函数

ES6允许函数具有块级作用域,类似于 `this`let和 `this` const

{
    function test() {
        return "block scoped";
    }
}
console.log(typeof test); // "function" in non-strict mode, "undefined" in strict mode
Enter fullscreen mode Exit fullscreen mode

12 — 调试器语句

使用该debugger语句暂停执行并打开调试器。

function problematicFunction() {
    debugger; // Execution pauses here if the developer tools are open
}
Enter fullscreen mode Exit fullscreen mode

13 — eval()用于动态代码执行

eval将字符串作为 JavaScript 代码执行,但这会带来严重的安全性和性能问题。

eval("let a = 1; console.log(a);"); // 1
Enter fullscreen mode Exit fullscreen mode

InMotion Hosting 促销虚拟主机方案

InMotion Hosting 提供多种套餐,从共享主机到 VPS 和专用服务器,助您找到适合项目需求的托管解决方案。

14 — 非标准 __proto__属性

虽然__proto__广泛支持使用 `setPrototype` 来设置对象的原型,但它并非标准做法。请改用 `setPrototype`Object.getPrototypeOf()和 ` Object.setPrototypeOf()setPrototype`。

let obj = {};
obj.__proto__ = Array.prototype; // Not recommended
Enter fullscreen mode Exit fullscreen mode

15 — document.write() 用于直接文档编辑

document.write()直接写入 HTML 文档,但使用这种方法可能会产生负面影响,尤其是在同步加载外部脚本时。

document.write("<h1>Hello World!</h1>");
Enter fullscreen mode Exit fullscreen mode

16 — 链式赋值

JavaScript 允许链式赋值,即可以在一条语句中将单个值赋给多个变量。

let a, b, c;
a = b = c = 5; // Sets all three variables to the value of 5
Enter fullscreen mode Exit fullscreen mode

17 — 属性存在的输入运算符

in运算符检查对象中是否存在某个属性,而不访问该属性的值。

const car = {
    make: 'Toyota',
    model: 'Corolla'
};
console.log('make' in car); // true
Enter fullscreen mode Exit fullscreen mode

18 — 对象属性简写

给对象赋值时,如果属性名与变量名相同,则可以使用简写形式。

const name = 'Alice';
const age = 25;
const person = { name, age };
Enter fullscreen mode Exit fullscreen mode

19 — 默认参数值与解构的结合

您可以将默认参数值与函数参数的解构结合使用,从而定义出更易读、更灵活的函数。

function createPerson({ name = 'Anonymous', age = 0 } = {}) {
   console.log(`Name: ${name}, Age: ${age}`);
}
createPerson({ name: 'Alice' }); // Name: Alice, Age: 0
createPerson(); // Name: Anonymous, Age: 0
Enter fullscreen mode Exit fullscreen mode

20 — 用于 Array.fill()初始化数组

使用该方法快速初始化一个具有特定值的数组fill()

const initialArray = new Array(5).fill(0); // Creates an array [0, 0, 0, 0, 0]
Enter fullscreen mode Exit fullscreen mode

符合人体工程学的工作空间设置,笔记本电脑放在桌子上,LED 台灯在 35.4 英寸处亮度为 500 勒克斯,周围摆放着书籍和办公用品。

利用可调节的 LED 照明优化工作空间,提高工作效率和舒适度,营造理想的专注工作环境。

21 — Array.includes()用于在场检查

使用该方法可以轻松检查数组中是否存在某个元素includes(),该方法比使用更易读indexOf()

const fruits = ['apple', 'banana', 'mango'];
console.log(fruits.includes('banana')); // true
Enter fullscreen mode Exit fullscreen mode

22 — 解构别名

对于destructuring对象,您可以使用别名将属性分配给具有不同名称的变量。

const obj = { x: 1, y: 2 };
const { x: newX, y: newY } = obj;
console.log(newX); // 1
Enter fullscreen mode Exit fullscreen mode

23 — 默认值的空合并运算符

用于??仅在处理null`or`时提供默认值undefined,而不是处理其他falsy值,例如`or`。

const count = 0;
console.log(count ?? 10); // 0, because count is not null or undefined
Enter fullscreen mode Exit fullscreen mode

24 — 动态函数名称

使用对象字面量中的计算属性名称创建具有动态名称的函数。

const dynamicName = 'func';
const obj = {
    [dynamicName]() {
        return 'Dynamic Function Name!';
    }
};
console.log(obj.func()); // "Dynamic Function Name!"
Enter fullscreen mode Exit fullscreen mode

25 — 私人班级场地

使用哈希#前缀定义类中的私有字段,这些字段不能从类外部访问。

class Counter {
    #count = 0;

    increment() {
        this.#count++;
    }

    getCount() {
        return this.#count;
    }
}
Enter fullscreen mode Exit fullscreen mode

包起来

当我们结束对 25 个高级 JavaScript 特性的探索时,JavaScript 的功能库既庞大又强大。

我们深入研究的每个功能都为解决编码难题开辟了新的途径,就像为我们的工具包添加了一个创新工具。

这不仅增强了我们创造性地、高效地制定解决方案的能力,也突显了 JavaScript 的动态多功能性。

这些高级功能凸显了持续学习在 Web 开发领域中的关键作用。

理解并运用这些细微差别,并将它们融入到我们的日常编码实践中,可以让我们提升技能,并为网络技术的演进做出贡献。

记住,掌握 JavaScript是一个持续的过程,每一行代码都蕴藏着发现非凡事物的机会。

让我们不断突破 JavaScript 的极限,保持好奇心,对未来无限的可能性持开放态度。

支持我们的技术洞察

请我喝杯咖啡

通过 PayPal 按钮捐款

注:本页面上的部分链接可能是联盟链接。如果您通过这些链接购买商品,我可能会获得少量佣金,而您无需支付任何额外费用。感谢您的支持!

文章来源:https://dev.to/mainulspace/25-unnoticeable-features-of-javascript-15l1