我们知道现在的开发人员使用===而不是==,为什么?我在网上看到的大部分教程都说,预测JavaScript转换是如何工作的这太复杂了,所以建议始终使用===。这导致许多程序员排除了语言的某些部分并将其视为缺陷,而不是扩展他们对过程的理解。这里有两个用例来说明使用==的好处。1.测试nullif(x==null)vsif(x===undefined||x===null)2.阅读用户输入指导我们的决定。简介在Javascript中,相等是通过两个运算符实现的。===—严格相等比较也称为三等运算符。==—抽象相等比较我一直在使用===因为有人告诉我它比==越来越好,而且我根本不需要考虑它,作为一个懒人我觉得它很方便.直到我看了Kyle的FrontendMasters上的“DeepJavaScriptFoundations”或[@getfiy][1]的[YouDon'tKnowJS][2]的作者。作为一名专业程序员,我没有深入思考我在日常工作中使用的运算符这一事实促使我传播意识并鼓励更多地理解和关注我们编写的代码。事实的根源在哪里重要的是要知道真正的原因在哪里。不是在Mozilla的W3school上,也不是在声称===比==更好的数百篇文章中,而且绝对不是在这篇文章中。.在JavaScript规范中,我们可以找到关于JavaScript工作原理的[文档][3]。打破常识(1)`==`仅检查值(松散地)如果您查看规范,从定义中可以很清楚地看出算法所做的第一件事实际上是检查类型。(2)`===`检查值和类型(strict)在这里,我们从规范中也可以看出,它检查类型,如果它们不同,则不再检查值。双等和三等的真正区别在于我们是否允许强制转换。JavaScript中的强制转换强制转换或类型转换是任何编程语言的基础之一。这对于JavaScript等动态类型语言尤其重要,因为如果类型发生变化,编译器不会对它大喊大叫并找它麻烦。理解强制转换意味着我们能够以与JavaScript相同的方式解释代码,从而为我们提供更大的可扩展性并最大限度地减少错误。(1)显式转换当程序员调用这些方法之一时,可以显式地发生转换,强制改变变量的类型。Boolean(),Number(),BigInt(),String(),Object()示例:letx='foo';typeofx//stringx=Boolean('foo')typeofx//boolean(2)JavaScript中的隐藏转换,变量是弱类型的,所以这意味着它们可以自动转换(隐式强制)。当我们使用算术运算符+/—*、周围上下文或使用==时,通常就是这种情况。2/'3'//'3'被强制转换为3newDate()+1//被强制转换为以1结尾的日期字符串if(x)//x被强制转换为布尔值1==true//true被强制转换Coercionis11=='true'//'true'被强制转换为NaN`this${variable}willbecorecedtostring隐式强制转换是一把双刃剑,如果使用得当,它可以增加可读性并减少冗长。如果使用不当或被误解,我们有一个令人失望的公式,人们会抱怨并指责JavaScript。比较算法(1)==运算符号算法如果X和Y是同一类型,则执行===。如果X为空且Y未定义,则为真,反之亦然。如果一个是数字,则强制另一个为数字。如果一个是对象,则转换为原始对象。否则,返回假。(2)===比较算法如果类型不匹配false。如果类型匹配-比较值,如果为NaN则返回false。-0—正确。流行用例(1)相同类型(大多数情况)===如果类型相同,则==完全相同。因此,应使用具有更多语义意义的。1==1//true'foo'=='foo'//true类型不同,我比较喜欢用===。(2)不同类型(原始类型)首先提醒大家,不同类型不代表未知类型。不知道类型表明您的代码中存在比仅使用===vs==更大的问题。了解类型显示了对代码的更深入理解,从而减少了更多错误。假设我们有可能是一个数字或一个字符串。请记住,该算法更偏向于数字类型,因此它会尝试使用toNumber()letfoo=2;letbar=32;//number或stringfoo==bar//如果bar是字符串,它将被转换为numberfoo===Number(bar)//doingbasicallythesamefoo===bar//bar是一个字符串,那么结果为false(3)null和undefined当使用==时,null和undefined是相等的。letfoo=nullletbar=undefined;foo==bar//truefoo===bar//false(4)非原始类型[object,array]不应该使用==或===来比较非原始类型如对象和数组数据。决策标准在所有可以使用的情况下,最好使用==。==有一个已知的类型,可以选择强制转换。知道类型总比不知道好。如果您不知道类型,请不要使用==。===当类型不匹配时没有意义。===当类型匹配时是不必要的。避免==的情况在某些情况下,你不应该在没有真正理解JavaScript中的假值的情况下使用==。==with0or""or""==withnonprimtives==trueor==false总结根据我目前的经验,我总是知道我正在处理的变量的类型,如果不知道,我只使用typeof允许我期望的变量。需要注意的四点:如果你不知道变量类型,那么使用===是唯一合理的选择不知道类型可能意味着你不理解代码,尝试重构你的代码知道类型可以写更好的代码。如果类型已知,最好使用==。原文:https://domnung.com/article/618194/learning//2020-01-30/medium.com/===-javascript-coercion-types-standing/stop-using-%3D%3D%3D-到处
