当前位置: 首页 > 科技观察

如何避免JavaScript类型转换

时间:2023-03-14 19:15:52 科技观察

本文已获得原作者ViduniWickramarachchi授权翻译。您是否经历过JavaScript中的一些值比较没有产生预期的结果?考虑以下情况:即使[]==0结果为真,也不会根据结果执行if[]条件。有没有想过这是为什么?本文重点介绍这些价值比较的工作原理以及影响它们的因素。在深入讲解之前,大家应该熟悉一个概念:类型转换。什么是JavaScript类型转换?这也称为类型强制。对于那些不熟悉这个概念的人来说,它只是自动将值从一种数据类型转换为另一种数据类型。看一个例子,大家就会理解的更清楚了。在这个例子中,两个变量定义了两种类型;字符串和数字。但是,当我们使用==(非严格比较)进行比较时,结果为真。原因是当我们使用==来比较这两者时,JavaScript会自动尝试将String类型转换为Number类型以产生结果。这是强制转换。JavaScript中有多种类型的强制转换。数字转换字符串转换布尔值转换对象的类型转换类型转换都好吗?在上述情况下,类型转换没有坏处。但是,在许多情况下,类型强制会导致问题。让我们看下面的例子。这里JavaScript已经将Number类型转换为String。这与相等比较中发生的情况相反。我们的预期结果是450。但是,我们得到了String输出。现在我们已经清楚地了解了类型转换以及为什么要避免它,让我们看看如何避免它。这是本文最重要的部分。所以坐下来,喝杯咖啡,集中注意力??如何避免JavaScript类型转换1.对数学运算使用显式转换如果您需要对用户输入或任何其他值使用数学运算,请在执行该操作之前自己进行显式转换会更安全。这样,可以避免任何意外行为。2.使用模板字面量来拼接字符串,而不是+如果需要拼接两个数字,使用模板字面量更安全。特别是,值的类型是未定义的。显式转换也可用于得出相同的结果。3.比较值时,使用严格比较(===)我们之前看到,当使用==时,JavaScript会执行隐式类型转换,这会导致结果不一致。因此,在我们的生产代码中使用它是不安全的。对于预期结果,您应该始终使用===进行比较。三重等号隐含的意思是:我可以知道变量的值和类型所以如果你将数字和字符串与值进行比较,结果将为假,因为它也考虑了变量的类型。这是获得预期的一致结果的更安全的方法。在JavaScript中,有两种数据类型变体。原始值(字符串、数字等)非原始值(数组、对象)至此我们已经讨论了原始数据类型的类型转换。我提供的第一个示例涉及非原始数据类型,例如数组。所有非原始数据类型都有一个名为.toPrimitive()的内置函数。将非原始值与原始值进行比较时,此函数会自动将非原始类型转换为原始类型。在我们看到的第一个例子中,当使用这个函数进行非严格比较时,一个空数组被转换为一个空字符串。确切地说,用于执行此转换的确切函数是toString()。因此,空数组(将被转换为空字符串)等于0。正如我们之前看到的,当在if条件中检查空数组时,将执行条件中的行。但是如果一个空数组被隐式转换为0呢?这是在不同的JavaScript条件下完成的:truthy和falsy。JavaScript将true以外的大多数值都视为true,除了少数。例如,0、-0、""被视为虚假值。由于空数组不被视为虚假值,因此在条件中检查它时,它将作为真值执行。(这里没有发生类型转换,空数组保留为数组,这是类型转换不一致的另一个例子。)总结JavaScript作为一种松散类型的语言,进行隐式类型转换。这可能会导致不一致和意外的结果。因此,我们应该始终避免这种类型转换。如果不确定值的类型,可以使用typeof检查。检查类型可以让我们更好地理解应该如何进行转换。~完了,我是碗智慧,我去刷碗了,白骨~作者:ViduniWickramarachchi译者:前端小智来源:stackabuse原文:https://blog.bitc.io/how-to-avoid-javascript-type-conversions-29e1258f37d8本文转载自微信公众号“大招天下”,可通过以下二维码关注。转载本文请联系大千世界公众号。