使用 Javascript 技巧的乐趣 1) 可选的 Catch Binding 2) JSON 字符串化格式 3) event.currentTarget 4) Promise.any() 5) 快速数字转换 6)Object.seal()

2025-06-08

有趣的 JavaScript 技巧

1)可选的 Catch Binding

2)JSON字符串化格式

3)事件.currentTarget

4)Promise.any()

5)快速数字转换

6)Object.seal()

在这篇文章中,我们将学习一些流行的 JavaScript 技巧。这些技巧让我兴奋不已。我相信读完这篇文章后,你也会感到兴奋。

图像

1)可选的 Catch Binding

     作为一名 Web 开发者,我们应该在应用程序中处理错误。例如,在使用async/await发出 API 请求时,我们可能会遇到错误的情况。请考虑以下代码

async function getDetails() {
   try {
      let result = await fetch('/getdetails');
      console.log(result);
   } catch (e) {
      console.error('Error:', e);
   }
}

Enter fullscreen mode Exit fullscreen mode

在这段代码中,如果 API 失败,它会抛出一个错误,而我们捕获了该错误。不过,考虑到常见的错误,我们不需要捕获该错误。

async function getDetails() {
   try {
      let result = await fetch('/getdetails');
      console.log(result);
   } catch {
      console.error('Seems we got an issue in our end. Can you try after sometime?');
   }
}

Enter fullscreen mode Exit fullscreen mode

在可选的 catch 绑定 (ES10/2019) 之前,这是不可能的。即使没有使用,我们也应该捕获错误。
浏览器支持的版本在这里。

2)JSON字符串化格式

     我们都知道这JSON.stringify会将 JS 对象转换为 JSON 字符串。但问题是,你能读取给定的 JSON 字符串吗?请考虑以下代码

    let obj = {
      Name: 'Alwar',
      Age: 23,
      Degree: 'B.E(ECE)',
      Hobbies: 'Working in Web Apps, Drawing, Playing cricket,'
      Country: 'India'
    };
    JSON.stringify(obj);
Enter fullscreen mode Exit fullscreen mode

它将给出如下输出

"{"Name":"Alwar","Age":23,"Degree":"B.E(ECE)","Hobbies":"Working in Web Apps, Drawing, Playing cricket","Country":"India"}"
Enter fullscreen mode Exit fullscreen mode

上面的字符串读起来是不是有点难?我们应该怎么做才能提高可读性呢?🤔。别担心,JSON.stringify 方法里有个选项。也就是说,我们可以把上面的代码写成这样:

JSON.stringify(obj, null, 2);
Enter fullscreen mode Exit fullscreen mode

现在我们可以得到如下输出

"{
  "Name": "Alwar",
  "Age": 23,
  "Degree": "B.E(ECE)",
  "Hobbies": "Working in Web Apps, Drawing, Playing cricket",
  "Country": "India"
}"
Enter fullscreen mode Exit fullscreen mode

有关 JSON.stringify 的更多信息,请参阅

3)事件.currentTarget

     我希望我们大多数人都使用过事件。从事件对象获取元素时,我们可以用它event.target来修改该特定元素。但是,如果我们遇到如下情况,该怎么办?

     这里有外层 div(红色)、中间层 div(绿色)和内层 div(蓝色)。我想把外层 div 的颜色改成灰色。为此,我使用了 event.target 方法。但是,如果我们点击中间层 div(绿色)和内层 div(蓝色),它们就会变成灰色,而不是外层 div(红色)变成灰色。这就event.currentTarget来了😎。

现在,如果我们点击中间的 div(绿色)和内部的 div(值),它们不会变成灰色。相反,它会将外部的 div(红色)变为灰色。这表明它会将事件处理程序附加到的元素传递给它。

4)Promise.any()

     此方法将返回一个 Promise,一旦可迭代对象中的某个 Promise 满足条件,该 Promise 就会解析并返回该 Promise 的值。您可以通过一个实际用例来理解这一点。假设我们在打开 Web 应用的索引页时应该加载以下任意一项信息

  • 家庭信息
  • 教育信息
  • 诞生信息

因此我们应该进行三次 API 调用来获取这些信息。

   let familyInfo = fetch('/getfamilyinfo').then((val) => return val);
   let educationInfo= fetch('/educationinfo').then((val) => return val);
   let nativityInfo = fetch('/nativityinfo').then((val) => return val);
   Promise.any([familyInfo, educationInfo, nativityInfo ]).then((value) => console.log(value));
Enter fullscreen mode Exit fullscreen mode

它将加载第一个已解析的 Promise 信息 💪。请注意,我发出了三个请求。这些请求稍后将在我的应用程序中使用。为了提升用户体验,我至少会显示一条信息。使用此方法前,
请检查浏览器支持的版本

5)快速数字转换

     在 javascript 中,我们有一种Number将字符串转换为数字的方法。

console.log(Number('5')) // 5
Enter fullscreen mode Exit fullscreen mode

+但是,我们可以通过在给定字符串前面添加符号将字符串转换为数字。

console.log(+'5') // 5
Enter fullscreen mode Exit fullscreen mode

6)Object.seal()

     与 object.freeze 方法不同,此方法可防止添加新属性,但允许编辑现有属性。

let detailsInfo = {
  name: 'Alwar',
  age: 23
};
Object.seal(detailsInfo);
detailsInfo.education = 'B.E';
console.log(detailsInfo);
Enter fullscreen mode Exit fullscreen mode

上述代码将产生如下输出

{
  name: 'Alwar',
  age: 23
}
Enter fullscreen mode Exit fullscreen mode

这里我不想添加任何其他属性。这就是为什么我密封了这个对象。另外,请记住,密封对象的属性是可编辑的。

let detailsInfo = {
  name: 'Alwar',
  age: 23
};
Object.seal(detailsInfo);
detailsInfo.name = 'Alwar G'
console.log(detailsInfo);
Enter fullscreen mode Exit fullscreen mode

现在我们得到的输出是

{
  name: 'Alwar G',
  age: 23
}
Enter fullscreen mode Exit fullscreen mode

如果您不想编辑现有属性,可以尝试object.freeze方法。
感谢您阅读这篇文章🙏。如果您有任何想分享的内容,欢迎随时发表评论。

鏂囩珷鏉ユ簮锛�https://dev.to/alwarg/fun-with-javascript-tricks-jmk
PREV
10 个著名的机器学习 JavaScript 库
NEXT
使用 CSS 😜 将自定义表情符号用作光标。