首页 > 编程语言 >30 个鲜为人知的 JavaScript 技巧,让你的代码更具可读性

30 个鲜为人知的 JavaScript 技巧,让你的代码更具可读性

时间:2025-01-07 14:30:10浏览次数:3  
标签:30 console name 可读性 对象 JavaScript let 数组 log

1 、使用 !! 转换为布尔值

使用双重否定快速将任何值转换为布尔值。

let truthyValue = !!1; // true
let falsyValue = !!0; // false

2 、 默认函数参数

设置函数参数的默认值以避免定义错误。

function greet(name = "Guest") {
    return `Hello, ${name}!`;
}

3 、 短 If-Else 的三元运算符

if-else 语句的简写。

let price = 100;
let message = price > 50 ? "Expensive" : "Cheap";

4 、动态字符串的模板文字

使用模板文字将表达式嵌入字符串中。

let item = "coffee";
let price = 15;
console.log(`One ${item} costs $${price}.`);

5 、解构赋值

轻松从对象或数组中提取属性。

 let [x, y] = [1, 2];
  let {name, age} = {name: "Alice", age: 30};

6 、用于数组和对象克隆的扩展运算符

克隆数组或对象而不引用原始对象。

let originalArray = [1, 2, 3];
let clonedArray = [...originalArray];

7 、短路求值

使用逻辑运算符进行条件执行。

  let isValid = true;
  isValid && console.log("Valid!");

8 、可选链接 (?.)

如果引用为空,则安全地访问嵌套对象属性而不会出现错误。

  let user = {name: "John", address: {city: "New York"}};
  console.log(user?.address?.city); // "New York"

9 、空值合并运算符 (??)

使用 ?? 为空或未定义提供默认值。

  let username = null;
  console.log(username ?? "Guest"); // "Guest"

10 、使用 map、filter 和 reduce 进行数组操作

无需传统循环即可优雅地处理数组。

// Map
  let numbers = [1, 2, 3, 4];
  let doubled = numbers.map(x => x * 2);

  // Filter
  const evens = numbers.filter(x => x % 2 === 0);

  // Reduce
  const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

11 、标记模板文字

使用模板文字进行函数调用,以进行自定义字符串处理。

function highlight(strings, ...values) {
   return strings.reduce((prev, current, i) => `${prev}${current}${values[i] || ''}`, '');
  }
  let price = 10;
  console.log(highlight`The price is ${price} dollars.`);

12 、使用 Object.entries() 和 Object.fromEntries()

将对象转换为数组并转换回来,以便于操作。

  let person = {name: "Alice", age: 25};
  let entries = Object.entries(person);
  let newPerson = Object.fromEntries(entries);

13 、 用于唯一元素的 Set 对象

使用 Set 存储任何类型的唯一值。

let numbers = [1, 1, 2, 3, 4, 4];
  let uniqueNumbers = [...new Set(numbers)];

14 、 对象中的动态属性名称

在对象文字表示法中使用方括号来创建动态属性名称。

  let dynamicKey = 'name';
  let person = {[dynamicKey]: "Alice"};

15 、使用 bind() 进行函数柯里化

创建一个新函数,当调用该函数时,将其 this 关键字设置为提供的值。

 function multiply(a, b) {
   return a * b;
  }
  let double = multiply.bind(null, 2);
  console.log(double(5)); // 10

16 、使用 Array.from() 从类似数组的对象创建数组

将类似数组或可迭代的对象转换为真正的数组。

 let nodeList = document.querySelectorAll('div');
  let nodeArray = Array.from(nodeList);

17 、可迭代对象的 for…of 循环

直接迭代可迭代对象(包括数组、映射、集合等)。

  for (let value of ['a', 'b', 'c']) {
   console.log(value);
  }

18 、 使用 Promise.all() 实现并发 Promise

同时运行多个 Promise 并等待所有 Promise 完成。

let promises = [fetch(url1), fetch(url2)];
Promise.all(promises)
    .then(responses => console.log('All done'));

19 、函数参数的 Rest 参数

将任意数量的参数捕获到数组中。

function sum(...nums) {
    return nums.reduce((acc, current) => acc + current, 0);
}

20 、用于性能优化的记忆化

存储函数结果以避免冗余处理。

const memoize = (fn) => {
    const cache = {};
    return (...args) => {
        let n = args[0]; // assuming single argument for simplicity
        if (n in cache) {
            console.log('Fetching from cache');
            return cache[n];
        } else {
            console.log('Calculating result');
            let result = fn(n);
            cache[n] = result;
            return result;
        }
    };
};

21 、使用 ^ 交换值

使用 XOR 按位运算符交换两个变量的值,无需临时变量。

let a = 1, b = 2;
a ^= b; b ^= a; a ^= b; // a = 2, b = 1

22 、使用 flat() 展平数组

使用 flat() 方法轻松展平嵌套数组,展平深度作为可选参数。

 let nestedArray = [1, [2, [3, [4]]]];
 let flatArray = nestedArray.flat(Infinity);

23 、使用一元加法转换为数字

使用一元加法运算符快速将字符串或其他值转换为数字。

  let str = "123";
  let num = +str; // 123 as a number

24 、 HTML 片段的模板字符串

使用模板字符串创建 HTML 片段,使动态 HTML 生成更清晰。

let items = ['apple', 'orange', 'banana'];
let html = `<ul>${items.map(item => `<li>${item}</li>`).join('')}</ul>`;

25 、使用 Object.assign() 合并对象

将多个源对象合并为目标对象,有效地组合它们的属性。

let items = ['apple', 'orange', 'banana'];
let html = `<ul>${items.map(item => `<li>${item}</li>`).join('')}</ul>`;

26 、短路默认值

处理可能未定义或为空的变量时,利用逻辑运算符分配默认值。

let options = userOptions || defaultOptions;

27 、 使用括号表示法动态访问对象属性

使用括号表示法动态访问对象的属性,当属性名称存储在变量中时很有用。

  let property = "name";
  let value = person[property]; // Equivalent to person.name

28 、 使用 Array.includes() 进行存在性检查

使用 includes() 检查数组是否包含某个值,这是 indexOf 的更清晰的替代方案。

  if (myArray.includes("value")) {
   // Do something
  }

29 、 Function.prototype.bind() 的强大功能

将函数绑定到上下文(此值)并部分应用参数,创建更可重用和模块化的代码。

 const greet = function(greeting, punctuation) {
   return `${greeting}, ${this.name}${punctuation}`;
  };
  const greetJohn = greet.bind({name: 'John'}, 'Hello');
  console.log(greetJohn('!')); // "Hello, John!"

30 、防止对象修改

使用 Object.freeze() 防止对对象的修改,使其不可变。为了实现更深层次的不变性,请考虑更彻底地实施不变性的库。

 let obj = { name: "Immutable" };
  Object.freeze(obj);
  obj.name = "Mutable"; // Fails silently in non-strict mod

标签:30,console,name,可读性,对象,JavaScript,let,数组,log
From: https://blog.csdn.net/qq_16242613/article/details/144943136

相关文章

  • “非旺玖原装的PL2303,请联系您的供应商”232串口转换器解决办法
    偶尔会用到PL2303这种十几年前的旧芯片做的232串口转换器,如果手头没有别的工具必须使用的话,需要配置一下才能使用。该串口调试器在不同的USB口插入可能出现COM口无效或者端口号变动(COM4/7/8等),需要通过设备管理器进行修改当提示题目上的错误时,需要重装旧版本驱动123......
  • Javascript实现asp.net mvc的checkbox基本功能
    Html的checkbox使用很广的,它的状态,勾选与非选。 初始状态,默认为非选。你可以设置它是勾选,直在checkbox标签中,添加checked属性。另外,在javascript可以这样,getById('Checkbox_IsPublished').checked=true; 或者,getById('Checkbox_IsPublished').setAttribute('chec......
  • 16 个 JavaScript 简写神技,提效 60%!
    分享下16个最常用的JavaScript的简写技巧,掌握它们可以让我们编写出更简洁、更优雅的代码,并显著提升开发效率(增加摸鱼时间)1.三元运算符简化条件判断//传统写法letresult;if(someCondition){result='yes';}else{result='no';}//简写方式constresu......
  • 12306 可以自动购票了!我羡慕了
    12月30日,中国铁路官方宣布,2024年12月30日至2025年2月8日间,铁路部门在北京市、天津市、上海市、江苏省、浙江省、广东省各车站往返四川省、重庆市各车站始发终到列车的长途区段车票发售中,试点推出“系统自动提交购票订单”功能。即日起,铁路12306用户可通过新......
  • 德普微一级代理 DP023N10TGN TOLL DPMOS N-MOSFET 100V 300A 1.75mΩ
    Features•UsesadvancedTrenchMOSFET-DPMOStechnology•Extremelylowon-resistanceRDS(on)•ExcellentQgxRDS(on)product(FOM)•QualifiedaccordingtoJEDECcriteriaProductSummaryPart#:DP023N10TGNVDS:100VRDS(on).typ:1.75m......
  • JavaScript字符串的常用方法
    在JavaScript中,字符串处理是一个非常常见的任务。JavaScript提供了丰富的字符串操作方法,使开发者能够高效地处理和操作字符串。本文将详细介绍JavaScript字符串的常用方法,并提供示例代码以便更好地理解和应用这些方法。字符串长度获取字符串的长度是一个基本操作,可以使用 lengt......
  • JavaScript 实现支持过期时间的数据缓存功能
    JavaScript实现支持过期时间的数据缓存功能要在JavaScript中实现数据缓存功能并支持设置过期时间,可以使用localStorage、sessionStorage或内存对象(如Map或普通对象)来存储数据,并为每个缓存项设置一个过期时间。以下是一个简单的实现示例:JavaScript实现支持过期时间的数......
  • javascript如何判断浏览器是否支持严格模式?
    在JavaScript中,严格模式(StrictMode)是一种特殊的执行模式,它可以帮助开发者避免一些常见的错误,并提供更强的错误检查。要在JavaScript中启用严格模式,你需要在脚本或函数的顶部添加"usestrict";声明。然而,直接检测浏览器是否“支持”严格模式并不直接可行,因为严格模式不是浏览器的......
  • javascript设置"严格模式"有什么目的?
    设置JavaScript的“严格模式”有以下几个主要目的:消除JavaScript语法的不合理和不严谨之处:通过启用严格模式,可以帮助开发者避免一些在正常模式下可能被忽略的语法错误或不合理之处,从而使代码更加严谨和可靠。提高代码的安全性:严格模式采用了一些安全措施,例如禁止this关键字......
  • 使用javascript实现一个popup
    在前端开发中,实现一个基本的popup(弹出窗口)可以通过多种方式来完成,包括使用原生JavaScript、HTML和CSS。以下是一个简单的示例,展示了如何使用这些技术来创建一个基本的popup。HTML结构首先,在HTML文件中定义popup的结构。这通常包括一个背景遮罩(overlay)和一个包含内容的......