您可能从未使用过的鲜为人知的 Javascript 功能

您可能从未使用过的鲜为人知的 javascript 功能

阅读原始网址 https://devaradise.com/lesser-known-javascript-features 中的帖子以获得更好的导航

javascript 是现代 web 开发的基石,为动态网站和应用程序提供动力。虽然许多开发人员熟悉 javascript 的基本且广泛使用的功能,但许多隐藏功能常常被忽视。这些鲜为人知的功能可以让你的代码更加简洁、可读、强大。

在本文中,我们将探索一些隐藏的 javascript 功能。从空合并运算符到 map 和 set 对象,每个功能都包含实际示例和最佳实践。利用这些功能可以帮助您编写更清晰、更高效的代码并轻松解决复杂的问题。

无论您是经验丰富的开发人员还是初学者,本文都将向您介绍未充分利用的 javascript 功能。最后,您将掌握新技术来提高您的 javascript 编码技能。

立即学习“Java免费学习笔记(深入)”;

关于 javascript 的其他帖子

javascript 数组/对象解构解释 + 示例在 javascript 中克隆嵌套对象/数组(深度克隆)的正确方法

鲜为人知的 javascript 功能

1. 空值合并运算符

空合并运算符 (??) 用于在变量为 null 或未定义时提供默认值。

代码示例:

let foo = null;let bar = foo ?? 'default value';console.log(bar); // output: 'default value'

使用空值合并运算符来处理可能出现 null 或未定义值的情况,确保您的代码使用默认值顺利运行。

2. 可选链接

可选的链接运算符 (?.) 允许安全访问深层嵌套的对象属性,避免属性不存在时出现运行时错误。

代码示例:

const user = {    profile: {        name: 'alice'    }};const userprofilename = user.profile?.name;console.log(userprofilename); // output: 'alice'const useraccountname = user.account?.name;console.log(useraccountname); // output: undefined

使用可选链来避免访问可能为空或未定义对象的属性时出现错误,使您的代码更加健壮。

3. 数字分隔符

数字分隔符 (_) 通过视觉上分隔数字,使大数字更易于阅读。

代码示例:

const largenumber = 1_000_000;console.log(largenumber); // output: 1000000

使用数字分隔符可以提高代码中大数字的可读性,特别是对于财务计算或大型数据集。

4. promise.allsettled

promise.allsettled 等待所有承诺解决(履行或拒绝)并返回描述结果的对象数组。

代码示例:

const promises = [promise.resolve('success'), promise.reject('error'), promise.resolve('another success')];promise.allsettled(promises).then((results) => {    results.foreach((result) => console.log(result));});// output:// { status: 'fulfilled', value: 'success' }// { status: 'rejected', reason: 'error' }// { status: 'fulfilled', value: 'another success' }

当您需要处理多个 promise 并希望确保所有结果都得到处理时,无论单个 promise 结果如何,请使用 promise.allsettled。

5. 私有类字段

私有类字段是只能在声明的类中访问和修改的属性。

代码示例:

class myclass {    #privatefield = 42;    getprivatefield() {        return this.#privatefield;    }}const instance = new myclass();console.log(instance.getprivatefield()); // output: 42console.log(instance.#privatefield); // uncaught private name #privatefield is not defined.

使用私有类字段将数据封装在类内,确保敏感数据不会在类外暴露或修改。

6. 逻辑赋值运算符

逻辑赋值运算符(&&=、||=、??=)将逻辑运算符与赋值相结合,提供了一种根据条件更新变量的简洁方法。

代码示例:

let a = true;let b = false;a &&= 'assigned if true';b ||= 'assigned if false';console.log(a); // output: 'assigned if true'console.log(b); // output: 'assigned if false'

使用逻辑赋值运算符来简化条件赋值,使您的代码更具可读性和简洁性。

7. 循环和块语句的标签

标签是后跟冒号的标识符,用于标记循环或块以供在 break 或 continue 语句中引用。

代码示例:

outerloop: for (let i = 0; i < 3; i++) {    console.log(`outer loop iteration ${i}`);    for (let j = 0; j < 3; j++) {        if (j === 1) {            break outerloop; // break out of the outer loop        }        console.log(`  inner loop iteration ${j}`);    }}// output:// outer loop iteration 0//   inner loop iteration 0
labelblock: {    console.log('this will be printed');    if (true) {        break labelblock; // exit the block    }    console.log('this will not be printed');}// output:// this will be printed

使用标签来控制复杂的循环行为,可以更轻松地管理嵌套循环并提高代码清晰度。

8. 标记模板文字

标记模板文字允许您使用函数解析模板文字,从而实现字符串文字的自定义处理。

代码示例1:

function logwithtimestamp(strings, ...values) {    const timestamp = new date().toisostring();    return (        `[${timestamp}] ` +        strings.reduce((result, str, i) => {            return result + str + (values[i] || '');        })    );}const user = 'johndoe';const action = 'logged in';console.log(logwithtimestamp`user ${user} has ${action}.`);// outputs: [2024-07-10t12:34:56.789z] user johndoe has logged in.

代码示例2:

function validate(strings, ...values) {    values.foreach((value, index) => {        if (typeof value !== 'string') {            throw new error(`invalid input at position ${index + 1}: expected a string`);        }    });    return strings.reduce((result, str, i) => {        return result + str + (values[i] || '');    });}try {    const validstring = validate`name: ${'alice'}, age: ${25}`;    console.log(validstring); // this will throw an error} catch (error) {    console.error(error.message); // outputs: invalid input at position 2: expected a string}

使用标记模板文字进行高级字符串处理,例如创建安全的 html 模板或本地化字符串。

9. 用于快速数学的按位运算符

javascript 中的位运算符对数字的二进制表示形式执行运算。它们通常用于低级编程任务,但它们也可以方便地进行快速数学运算。

按位运算符列表

&(和)| (或)^(异或)〜(不是)<> (右移)>>> (无符号右移)

代码示例1:

您可以使用 and 运算符来检查数字是偶数还是奇数。

const iseven = (num) => (num & 1) === 0;const isodd = (num) => (num & 1) === 1;console.log(iseven(4)); // outputs: trueconsole.log(isodd(5)); // outputs: true

代码示例2:

可以使用左移(<>)运算符分别乘以2的幂和除以2的幂。

const multiplybytwo = (num) => num < num >> 1;console.log(multiplybytwo(5)); // outputs: 10console.log(dividebytwo(10)); // outputs: 5

代码示例3:

您可以使用 and 运算符检查数字是否为 2 的幂。

const ispoweroftwo = (num) => num > 0 && (num & (num - 1)) === 0;console.log(ispoweroftwo(16)); // outputs: trueconsole.log(ispoweroftwo(18)); // outputs: false

将按位运算符用于需要低级二进制操作的性能关键型应用程序,或进行快速数学运算。

10. 财产检查操作员

in 运算符检查对象中是否存在属性。

极简智能王 极简智能王

极简智能- 智能聊天AI绘画,还可以创作、编写、翻译、写代码等多种功能,满足用户生活和工作的多方面需求

极简智能王 33 查看详情 极简智能王

代码示例:

const obj = { name: 'alice', age: 25 };console.log('name' in obj); // output: trueconsole.log('height' in obj); // output: false

使用 in 运算符来验证对象中属性是否存在,确保您的代码能够优雅地处理缺少属性的对象。

11. 调试器语句

调试器语句调用任何可用的调试功能,例如在代码中设置断点。

代码示例:

function checkvalue(value) {    debugger; // execution will pause here if a debugger is available    return value > 10;}checkvalue(15);

在开发过程中使用调试器语句来暂停执行并检查代码行为,帮助您更有效地识别和修复错误。

12. 链式赋值

链式赋值允许您在单个语句中将单个值分配给多个变量。

代码示例:

let a, b, c;a = b = c = 10;console.log(a, b, c); // output: 10 10 10

使用链式赋值来初始化具有相同值的多个变量,减少代码冗余。

13. 动态函数名称

动态函数名称允许您使用在运行时计算的名称来定义函数。

代码示例:

const funcname = 'dynamicfunction';const obj = {    [funcname]() {        return 'this is a dynamic function';    }};console.log(obj.dynamicfunction()); // output: 'this is a dynamic function'

使用动态函数名称,根据运行时数据创建名称的函数,增强代码灵活性和可重用性。

14. 获取函数参数

arguments 对象是一个类似数组的对象,其中包含传递给函数的参数。

代码示例:

function sum() {    let total = 0;    for (let i = 0; i < arguments.length; i++) {        total += arguments[i];    }    return total;}console.log(sum(1, 2, 3)); // outputs: 6

使用参数对象来访问传递给函数的所有参数,这对于具有可变长度参数的函数很有用。

15. 一元+运算符

一元运算符 (+) 将其操作数转换为数字。

代码示例:

console.log(+'abc'); // outputs: nanconsole.log(+'123'); // outputs: 123console.log(+'45.67'); // outputs: 45.67 (converted to a number)console.log(+true); // outputs: 1console.log(+false); // outputs: 0console.log(+null); // outputs: 0console.log(+undefined); // outputs: nan

使用一元运算符进行快速类型转换,尤其是在处理用户输入或来自外部源的数据时。

16. 求幂 ** 运算符

求幂运算符 (**) 对其操作数执行求幂(幂)操作。

代码示例:

const base = 2;const exponent = 3;const result = base ** exponent;console.log(result); // output: 8

使用幂运算符进行涉及幂的简洁易读的数学表达式,例如在科学或金融计算中。

17. 函数属性

javascript 中的函数是对象并且可以具有属性。

代码示例1:

function myfunction() {}myfunction.description = 'this is a function with a property';console.log(myfunction.description); // output: 'this is a function with a property'

代码示例2:

function trackcount() {    if (!trackcount.count) {        trackcount.count = 0;    }    trackcount.count++;    console.log(`function called ${trackcount.count} times.`);}trackcount(); // outputs: function called 1 times.trackcount(); // outputs: function called 2 times.trackcount(); // outputs: function called 3 times.

使用函数属性来存储与函数相关的元数据或配置,增强代码的灵活性和组织性。

18. 对象获取器和设置器

getter 和 setter 是获取或设置对象属性值的方法。

代码示例:

const obj = {    firstname: 'john',    lastname: 'doe',    _age: 0, // conventionally use an underscore for the backing property    get fullname() {        return `${this.firstname} ${this.lastname}`;    },    set age(newage) {        if (newage >= 0 && newage <= 120) {            this._age = newage;        } else {            console.log('invalid age assignment');        }    },    get age() {        return this._age;    }};console.log(obj.fullname); // outputs: 'john doe'obj.age = 30; // setting the age using the setterconsole.log(obj.age); // outputs: 30obj.age = 150; // attempting to set an invalid age// outputs: 'invalid age assignment'console.log(obj.age); // still outputs: 30 (previous valid value remains)

使用 getter 和 setter 来封装对象的内部状态,提供一种受控的方式来访问和修改属性。

19.!!棒棒操作员

那个!! (双重否定)运算符将值转换为其布尔值。

代码示例:

const value = 'abc';const value1 = 42;const value2 = '';const value3 = null;const value4 = undefined;const value5 = 0;console.log(!!value); // outputs: true (truthy value)console.log(!!value1); // outputs: true (truthy value)console.log(!!value2); // outputs: false (falsy value)console.log(!!value3); // outputs: false (falsy value)console.log(!!value4); // outputs: false (falsy value)console.log(!!value5); // outputs: false (falsy value)

使用!!运算符可快速将值转换为布尔值,在条件表达式中很有用。

20.映射和设置对象

map 和 set 是具有独特功能的集合。 map 保存键值对,set 保存唯一值。

代码示例1:

// creating a mapconst mymap = new map();// setting key-value pairsmymap.set('key1', 'value1');mymap.set(1, 'value2');mymap.set({}, 'value3');// getting values from a mapconsole.log(mymap.get('key1')); // outputs: 'value1'console.log(mymap.get(1)); // outputs: 'value2'console.log(mymap.get({})); // outputs: undefined (different object reference)

代码示例2:

// Creating a Setconst mySet = new Set();// Adding values to a SetmySet.add('apple');mySet.add('banana');mySet.add('apple'); // Duplicate value, ignored in a Set// Checking size and valuesconsole.log(mySet.size); // Outputs: 2 (only unique values)console.log(mySet.has('banana')); // Outputs: true// Iterating over a SetmySet.forEach((value) => {    console.log(value);});// Outputs:// 'apple'// 'banana'

使用map来集合任意数据类型作为键的键值对集合,使用set来集合唯一值,提供高效的数据管理方式。

结论

通过利用这些鲜为人知的 javascript 功能,您可以编写更高效、可读且健壮的代码。开始将这些技术集成到您的项目中,将您的 javascript 技能提升到一个新的水平。

我们希望本指南为您提供有价值的见解和实际示例,以帮助您利用这些隐藏的 javascript 功能。不要犹豫,尝试一下它们,看看它们如何适合您的编码实践。

如果您觉得这篇文章有帮助,请与您的开发人员和朋友分享。我很想听听您对这些功能的想法和体验,所以请随时在下面发表评论。

谢谢。快乐编码!

以上就是您可能从未使用过的鲜为人知的 Javascript 功能的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/472662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
汽车救援APP的实用功能及智能化优势
上一篇 2025年11月8日 08:10:38
找不到msvcp100.dll怎么办?msvcp100.dll文件丢失修复方法
下一篇 2025年11月8日 08:10:48

相关推荐

  • 如何高效管理Debian文件系统

    高效管理debian文件系统可以通过以下几个步骤来实现: 了解文件系统结构: Debian文件系统遵循标准的Linux文件系统层次结构,例如/bin, /etc, /home, /usr, /var等。熟悉这些目录的作用,有助于更好地组织和管理文件。 磁盘空间管理: 使用df -h命令查看磁盘空间使…

    2026年9月24日
    100
  • mysql的索引有哪些类型

    mysql的索引有哪些类型mysql的索引有哪些类型mysql的索引有哪些类型mysql的索引有哪些类型

    MySQL索引可快速查找数据,通过在键值对中存储列值和数据指针实现。常见的索引类型有:B-Tree索引:支持范围查询,数据量大时性能佳。哈希索引:完全匹配查询快,但更新数据开销大。全文索引:索引文本数据,支持全文搜索。空间索引:索引地理空间数据,支持空间查询。并发B-Tree索引:高并发环境下性能更…

    2026年9月24日 用户投稿
    100
  • Spring Boot @Nested 测试中属性覆盖与隔离策略

    Spring Boot @Nested 测试中属性覆盖与隔离策略Spring Boot @Nested 测试中属性覆盖与隔离策略Spring Boot @Nested 测试中属性覆盖与隔离策略Spring Boot @Nested 测试中属性覆盖与隔离策略

    本文深入探讨了在Spring Boot集成测试中,如何利用@Nested注解结合@TestPropertySource实现细粒度的属性配置和隔离。通过详细的示例代码,展示了外部测试类和嵌套测试类如何定义各自的属性集,以及这些属性在不同测试上下文中的继承与覆盖机制,从而确保测试环境的精确控制和独立性。…

    2026年9月24日 用户投稿
    100
  • UC浏览器怎么查看和清除LocalStorage数据 UC浏览器LocalStorage数据管理方法

    可通过隐私设置清除或开发者工具查看LocalStorage。①在UC浏览器设置中选择“隐私与安全”→“清除浏览数据”,勾选“Cookie及其他网站数据”即可批量删除LocalStorage;②打开uc://inspect启用开发者工具,通过电脑Chrome远程调试查看具体键值对;③root设备后使用…

    2026年9月24日
    300
  • Java Map.entrySet遍历性能优化

    使用增强for循环遍历Map.entrySet()更高效,避免显式声明Iterator;提前缓存key和value减少重复调用;优先选用HashMap提升性能;大数据量可考虑parallelStream并行处理,但需权衡开销。 在Java中,Map.entrySet() 是遍历键值对最常用的方式之一…

    2026年9月24日
    200
  • Laravel 表单验证失败后保留输入值:最佳实践教程

    本文旨在帮助 Laravel 开发者解决表单验证失败后,如何保留用户已输入数据的问题。我们将深入探讨 withInput() 方法的使用,并提供清晰的代码示例,确保即使在验证失败的情况下,用户体验也能保持流畅。通过本文的学习,你将掌握在 Laravel 中优雅地处理表单验证,并提升应用的可用性。 在…

    2026年9月24日
    100
  • 动态表单输入中多答案数据处理教程

    本教程旨在解决Web开发中,如何高效处理包含动态数量答案的表单提交数据,特别是当需要更新现有问题及其关联答案时。文章将详细阐述前端表单的命名策略以及后端PHP如何解析这些动态输入,以准确获取答案内容及其对应的数据库ID,从而实现数据的精准更新,并提供最佳实践建议。 理解动态答案更新的挑战 在构建问答…

    2026年9月24日
    100
  • 在Laravel中向视图传递多个变量的几种方法

    本文旨在探讨在laravel框架中,如何高效且正确地从控制器向视图传递多个变量。我们将详细介绍使用单个关联数组、`compact()`辅助函数以及链式调用`with()`方法这三种核心策略,并提供实用的代码示例和最佳实践,确保开发者能够灵活地管理视图数据,提升应用的可维护性与可读性。 Laravel…

    2026年9月23日
    000
  • Java中利用正则表达式从JSON数组中提取独立JSON对象

    本文详细介绍了如何利用Java正则表达式从格式化的JSON数组中提取独立的JSON对象字符串。通过一个具体的代码示例,文章展示了如何构建一个精确的正则表达式模式来匹配并分离数组中的每个JSON实体,并提供了Java代码实现,包括去除多余空白字符的步骤,最终实现将JSON数组解析为可操作的独立对象字符…

    2026年9月23日
    200
  • Java中使用栈验证JSON字符串结构:深入理解与实践

    本文探讨了在Java中利用栈验证JSON字符串结构的核心原理与常见陷阱。我们将分析一种初始实现中处理引号、转义字符及字符串内部结构字符的不足,并提供一个更健壮的栈基方法,以准确判断JSON的括号、方括号和引号是否平衡,同时纠正关于不完整JSON片段有效性的常见误解。 1. JSON结构与验证的重要性…

    2026年9月23日
    100
  • Java中基于栈验证JSON字符串结构有效性的方法

    本文探讨了在Java中利用栈(Stack)数据结构验证JSON字符串结构有效性的方法。我们将分析一个常见的基于栈的实现示例,指出其在处理字符串内部字符、引号平衡以及转义字符方面的潜在缺陷。文章将提供一个改进的解决方案,并强调此方法主要用于结构匹配,而非完整的JSON语法验证,同时建议生产环境中使用专…

    2026年9月23日
    200
  • Java JSON字符串有效性验证:基于栈的实现与常见陷阱

    本文深入探讨了使用Java栈结构验证JSON字符串有效性的方法。通过分析一个常见错误示例,详细阐述了在处理括号、方括号以及字符串引号时的正确逻辑,特别强调了字符串内部字符(包括转义字符)不应影响结构平衡的原则,并提供了改进思路,旨在帮助开发者构建健壮的JSON验证器。 JSON结构与栈的适用性 JS…

    2026年9月23日
    100
  • Karate框架中处理带方括号和日期范围的GET请求参数

    本文旨在解决Karate框架中构建包含复杂、带方括号(如filters[start_date])及日期范围的GET请求参数时遇到的URL编码问题。通过对比直接定义查询对象和使用param关键字的方法,详细阐述了如何正确地构造URL,确保参数格式符合预期,从而有效进行API测试。 1. 问题背景与挑战…

    2026年9月22日
    200
  • ​​VSCode的隐藏神技大公开!这些操作让你的编程效率突破天际​​

    vscode的真正效率提升源于掌握其核心功能与高级特性。首先要善用命令面板(ctrl/cmd + shift + p),它能快速执行格式化、打开文件、运行任务等操作,避免在菜单中层层查找;其次,多光标编辑(如alt+点击或ctrl/cmd + d)可实现批量修改,极大提升重构效率;通过tasks.j…

    2026年9月22日
    300
  • PHP数组如何定义和使用_PHP数组定义与使用详细教程

    PHP数组是存储和管理多个值的核心工具,支持索引、关联、混合及多维结构;通过方括号定义,可灵活访问、修改、添加或删除元素,并利用foreach高效遍历。 PHP数组是存储一系列值的强大工具,无论这些值是简单的数据项,还是更复杂的结构。它的核心思想就是把一堆相关的数据“打包”在一起,通过一个统一的名字…

    2026年9月22日
    000
  • 黑色支付宝值多少钱

    黑色支付宝并不存在于正规渠道,它实际上是通过非法手段篡改、仿冒官方支付宝应用的恶意软件。这类未经授权的程序不仅违反了相关法律法规,还可能对用户造成严重的安全威胁,包括个人信息被盗取、账户资金被窃取等风险,因此绝不能下载或使用,更不应关注其所谓的“费用”或“功能”。 支付宝是经过国家认证的合法第三方支…

    2026年9月22日
    300
  • Sublime使用MySQL实现数据权限控制模块_根据用户角色限制访问范围

    Sublime使用MySQL实现数据权限控制模块_根据用户角色限制访问范围Sublime使用MySQL实现数据权限控制模块_根据用户角色限制访问范围Sublime使用MySQL实现数据权限控制模块_根据用户角色限制访问范围Sublime使用MySQL实现数据权限控制模块_根据用户角色限制访问范围

    在sublime中实现数据权限控制模块的核心在于根据用户角色动态拼接sql语句,具体步骤如下:1. 建立角色表、用户表和权限规则表,明确角色与数据的对应关系;2. 用户登录后获取其角色id,并查询该角色可访问的数据范围;3. 根据权限动态构建sql查询条件,限制访问范围;4. 使用python等语言…

    2026年9月22日 用户投稿
    300
  • 深入理解PHP数组中JSON字符串的解析与数据提取

    本文将详细讲解如何在PHP中处理包含JSON格式字符串的数组。通过使用json_decode函数,我们可以将这些JSON字符串转换为可操作的PHP数组,进而轻松提取所需的shortname和fullname等键值对。教程将提供清晰的示例代码,演示循环遍历和直接访问两种数据提取方式,帮助开发者高效地解…

    2026年9月22日
    300
  • MySQL备份压缩与加密技巧_MySQL提升备份安全与效率

    MySQL备份压缩与加密技巧_MySQL提升备份安全与效率MySQL备份压缩与加密技巧_MySQL提升备份安全与效率MySQL备份压缩与加密技巧_MySQL提升备份安全与效率MySQL备份压缩与加密技巧_MySQL提升备份安全与效率

    mysql备份压缩与加密的核心在于减少存储空间并提升数据安全性。1. 压缩能显著降低存储成本,提升传输效率,加快恢复速度,简化备份管理,并有助于满足合规要求;2. 加密则通过防止未授权访问保障数据安全。实现方式主要有:1. 使用mysqldump结合gzip和gpg/openssl进行逻辑备份、压缩…

    2026年9月22日 用户投稿
    200
  • PHP each() 函数的替代方案:自定义实现与常见错误修正

    本文探讨了PHP中已废弃的each()函数的替代方案。针对常见的自定义实现,如myEach(),文章详细指出了其在返回数组结构中常犯的错误,并提供了正确的代码示例,以确保替代函数能够模拟each()的预期行为,帮助开发者编写更健壮、兼容未来的PHP代码。 理解 each() 函数及其废弃背景 在PH…

    2026年9月22日
    000

发表回复

登录后才能评论
关注微信