当前位置: 首页 > Web前端 > vue.js

别再到处用===

时间:2023-04-01 10:58:48 vue.js

作者:SeifeldinMahjoub译者:前端小智来源:domnung点赞再看,养成习惯本文已收录在GitHubhttps://github.com/qq44924588...以前好评文章的更多分类,也整理了很多我的文档和教程资料。欢迎来到星和完美。面试时可参考考点复习。我希望我们能在一起。我们知道现在的开发者使用===而不是==,为什么?我在网上看到的大多数教程都认为预测JavaScript强制转换的工作方式太复杂了,因此建议始终使用===。这导致许多程序员排除了语言的某些部分并将其视为缺陷,而不是扩展他们对过程的理解。这里有两个用例来说明使用==的好处。1.测试nullif(x==null)vsif(x===undefined||x===null)2.读取用户输入letuserInput=document.getElementById('amount');letamount=999;if(amount==userInput)vsif(amout===Number(userInput))在这篇文章中,我们将比较差异,理解强制转换,研究一些流行的用例,最后找到指导我们决策的指南,学习有关此主题的更多信息。简介在Javascript中,相等是通过两个运算符实现的。===—严格相等比较也称为三等运算符。==—抽象相等比较我一直在使用===因为有人告诉我它比==越来越好,而且我根本不需要考虑它,作为一个懒人我觉得它很方便.直到我看了Kyle或@getfiy的YouDon'tKnowJS作者在FrontendMasters上的“深度JavaScript基础”。作为一名专业程序员,我没有深入思考我在日常工作中使用的运算符这一事实促使我传播意识并鼓励更多地理解和关注我们编写的代码。事实的根源在哪里重要的是要知道真正的原因在哪里。不是在Mozilla的W3school上,也不是在声称===比==更好的数百篇文章中,而且绝对不是在这篇文章中。.在JavaScript规范中,我们可以找到有关JavaScript工作原理的文档。违反常识1.==仅检查值(松散地)如果您查看规范,从定义中可以很清楚地看出算法所做的第一件事实际上是检查类型。2.===检查值和类型(严格)这里我们可以从规范中再次看到它检查类型,如果它们不同则不再检查值。双等和三等的真正区别在于我们是否允许强制转换。JavaScript中的强制转换强制转换或类型转换是任何编程语言的基础之一。这对于JavaScript等动态类型语言尤其重要,因为如果类型发生变化,编译器不会对它大喊大叫并找它麻烦。理解强制转换意味着我们能够以与JavaScript相同的方式解释代码,从而为我们提供更大的可扩展性并最大限度地减少错误。显式强制转换当程序员调用这些方法之一时,强制转换会显式发生,从而强制更改变量的类型。Boolean(),Number(),BigInt(),String(),Object()示例:letx='foo';typeofx//stringx=Boolean('foo')typeofx//JavaScript中的布尔隐藏转换,变量是弱类型的,所以这意味着它们可以自动转换(隐式强制)。当我们使用算术运算符+/—*、周围上下文或使用==时,通常就是这种情况。2/'3'//'3'被强制转换为3newDate()+1//被强制转换为以1结尾的日期字符串if(x)//x被强制转换为布尔值1==true//true被强制转换为11=='true'//'true'被强制转换为NaN`this${variable}将被核心转换为字符串隐式强制转换是一把双刃剑,合理使用可以增加可读性并减少冗长。如果使用不当或被误解,我们有一个令人失望的公式,人们会抱怨并指责JavaScript。比较算法==运算符算法如果X和Y的类型相同,则执行===。如果X为空且Y未定义,则为真,反之亦然。如果一个是数字,则强制另一个为数字。如果一个是对象,则转换为原始对象。否则,返回假。===类型不匹配时比较的算法false。如果类型匹配-比较值,如果为NaN则返回false。-0—正确。流行用例1.相同类型(大多数情况)如果类型相同,则===与==完全相同。因此,应使用具有更多语义意义的。1==1//true......1===1//true'foo'=='foo'//true......'foo'==='foo'//true类型不同,我更喜欢用===。2.类型不同(原始类型)首先要提醒大家,类型不同并不代表未知类型。不知道类型表明您的代码中存在比仅使用===vs==更大的问题。了解类型显示了对代码的更深入理解,从而减少了更多错误。假设我们有可能是一个数字或一个字符串。请记住,该算法偏爱数字,因此它会尝试toNumber()letfoo=2;letbar=32;//numberorstringfoo==bar//如果bar是一个字符串,它将转换为numberfoo===Number(bar)//做的基本上是一样的foo===bar//其中bar是一个字符串那么结果是false3.null和undefined当==时,null和undefined是相等的。letfoo=nullletbar=undefined;foo==bar//truefoo===bar//false4.非原始类型[object,array]不应使用==或===来比较非原始类型,例如对象和数组数据。DecisionCriteria在所有可以使用的情况下,最好使用==。==有一个已知的类型,可以选择强制转换。知道类型总比不知道好。如果您不知道类型,请不要使用==。===当类型不匹配时没有意义。===当类型匹配时是不必要的。避免==的情况在某些情况下,你不应该在没有真正理解JavaScript中的假值的情况下使用==。==with0or""or""==withnonprimitives==trueor==false根据我目前的经验总结,我总是知道我正在处理的变量的类型,如果我不知道,我只是使用typeof只允许我期望的变量。需要注意的四点如果你不知道变量类型,那么使用===是唯一合理的选择不知道类型可能意味着你不理解代码,尝试重构你的代码知道类型可以写得更好代码。如果类型已知,最好使用==。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://domnung.com/article/6...每周更新交流文章。可以微信搜索“大千世界”立即阅读更新(比博客早一两篇),这篇文章GitHubhttps://github.com/qq449245884/xiaozhi已经收录,还有我的很多文档已经整理好了。欢迎明星和完美。可以参考考点面试。另外关注公众号,后台回复福利就可以看到福利了。你知道。