关于html5:如何避免JavaScript类型转换

50次阅读

共计 1935 个字符,预计需要花费 5 分钟才能阅读完成。

作者:Viduni Wickramarachchi
译者:前端小智
起源:stackabuse

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

你是否经验过 JavaScript 中的某些值比拟没有失去预期后果的状况?

看上面的状况:

即便 []==0 后果为真,if[]条件也没有依据后果执行。有没有想过为什么会这样?

本文次要阐明这些值比拟的工作原理以及影响它们的因素。在深刻解释之前,大家要相熟一个概念:类型转换

什么是 JavaScript 类型转换?

这也称为 类型强制。对于不相熟此概念的人来说,它只是将值从一种数据类型主动转换为另一种数据类型。

看个例子,大家会更分明明确。

在此示例中,定义的两个变量具备两种类型;字符串和数字。然而,当咱们应用 ==(非严格比拟)进行比拟时,后果为 true。起因是当咱们应用== 比拟这两个时,JavaScript 会主动尝试将 String 类型转换为 Number 类型以产生后果。这是一种强制转换。

JavaScript 中有多种强制类型。

  • Number conversions
  • String conversions
  • Boolean conversions
  • 对象的类型转换

类型强制转换都是好的吗?

在上述情况下,类型转换没有坏处。然而,在许多状况下,类型强制会导致问题。

咱们看上面例子。

在这里,JavaScript 已将 Number 类型转换为 String。这与相等比拟中产生的状况相同。咱们预期的后果是450。然而,咱们失去了String 输入。

当初,咱们对类型转换以及为什么要防止应用类型转换有了清晰的理解,让咱们看看如何防止类型转换。这是本文最重要的局部。因而,请坐下来,喝咖啡并集中精力😃

如何防止 JavaScript 类型转换

1. 对数学运算应用显式转换

如果你须要对用户输出或任何其余值应用数学运算,则在执行该运算之前,本人进行一次显式转换会更平安。这样,能够防止任何意外行为。

2. 应用模板字面值连贯字符串,而不是+

如果须要连贯两个数字,则应用模板文字会更平安。特地是不确定值的类型。

也能够应用显式转换来导出雷同的后果。

3. 当比拟值时,应用严格的比拟(===)

后面咱们看到,当应用 == 时,JavaScript 会执行隐式类型转换,这会导致不统一的后果。因而,在咱们的生产代码中应用它是不平安的。

为了得出预期的后果,应该始终应用 === 进行比拟。三等号隐含地示意:

我能够同时理解变量的值和类型

因而,如果将数字和字符串与值进行比拟,后果将是 false,因为它也会思考变量的类型。

这是取得预期统一后果的更平安的办法。

在 JavaScript 中,数据类型有两种变体。

  • 原始值(字符串、数字等)
  • 非原始值(数组、对象)

到目前为止,咱们曾经探讨了原始数据类型的类型转换。我提供的第一个示例波及非原始数据类型,例如数组。

所有非原始数据类型都有一个名为 .toPrimitive() 的内置函数。比拟非原始值和原始值时,此函数会主动将非原始类型转换为原始类型。在咱们看过的第一个示例中,当应用此函数进行非严格比拟时,空数组将转换为空字符串。确切地说,用于执行此转换的确切函数是toString()。因而,空数组(将转换为空字符串)等于0

正如咱们后面所看到的,当在 if 条件中查看空数组时,将执行条件中的行。然而,如果空数组隐式转换为 0 怎么办?

这是在独自的 JavaScript 条件下进行的: 真值和虚值 。除了true 以外,JavaScript 将大部分有值的视为真值,除了多数值。例如,0-0""被视为虚值。因为空数组不被认为是虚值,当在条件中查看它时,它将作为真值执行。(这里不会产生类型转换,空数组保留为数组,这是类型转换不统一的另一个例子。)

总结

JavaScript 作为一种涣散类型语言,执行隐式类型转换。这会导致不统一和意想不到的后果。因而,咱们应该在任何时候都防止这种类型转换。如果不确定值的类型,能够应用 typeof 查看。查看类型能够让咱们更好地了解应该如何进行转换。

~ 完,我是刷碗智,我要去刷碗了,骨的白~


代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

原文:https://blog.bitc.io/how-to-a…

交换

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq44924588… 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

正文完
 0