Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中使用双重相等(松散相等)什么时候有意义?_Javascript_Comparison_Equality - Fatal编程技术网

在Javascript中使用双重相等(松散相等)什么时候有意义?

在Javascript中使用双重相等(松散相等)什么时候有意义?,javascript,comparison,equality,Javascript,Comparison,Equality,考虑到和,作为一个JS新手,我一直试图避免使用双重相等,而是选择了三重相等 但是,当您希望允许Javascript自动转换类型时,何时使用双重质量有意义。例如 if (someElement.value == 3) 输入的值始终是字符串。=操作符将在此处自动将其转换为数字,因此您无需写入 if (parseInt(someElement.value) === 3) 你应该小心,因为一些自动转换可能不会达到你期望的效果。简短回答:使用=而不是=是没有意义的 长答案:虽然这毫无意义,但在某些情况

考虑到和,作为一个JS新手,我一直试图避免使用双重相等,而是选择了三重相等


但是,当您希望允许Javascript自动转换类型时,何时使用双重质量有意义。例如

if (someElement.value == 3)
输入的值始终是字符串。
=
操作符将在此处自动将其转换为数字,因此您无需写入

if (parseInt(someElement.value) === 3)

你应该小心,因为一些自动转换可能不会达到你期望的效果。

简短回答:使用
=
而不是
=
是没有意义的

长答案:虽然这毫无意义,但在某些情况下,您希望编写更少的代码,并且您对自己的输入很有把握

如果你真的明白什么是真实的,
=
就没那么糟糕了。有一些错误,例如
[1]==true
[2]==false

请记住,Javascript的主要目标是供web设计师使用,这是您遇到的所有这些东西背后的原因之一

作为一个简单的例子,最好的方法是使用它来避免转换数据和检查相等性。下面是另一个例子:

const deleteTodos = _ => {
    if (howManyTasksToRemoveInput.value == tasks.length) {
        warningLabel.innerHTML = "You can't remove all the list";
    } else if (howManyTasksToRemoveInput.value > tasks.length) {
        warningLabel.innerHTML = "You DEFINITELY can't remove more tasks than you have";
    } else {
        tasks.splice(0, +howManyTasksToRemoveInput.value);
    }
}

有一种情况下,使用
==
有一个明显的好处,那就是
foo==null
:当且仅当
foo===undefined | foo==null
这是一个常用的测试时,这才是正确的


即使在这里,使用node的
isNullOrUndefined(foo)
(实现为
返回值==null;
!)这样的方法来表达意图也是一种更为清晰的方式,如果这不是您正在使用的代码库中的既定实践的话。

您使用严格的相等(==)仅当您希望确保操作数的值相等且其数据类型也相同时。双等式(=)仅检查值是否相同,尤其是隐式转换的数值,而忽略数据类型。三重相等应始终有效,但必须先将一个或两个相等转换为相同的数据类型。但是,为什么不使用
==“3”
?或者,如果
3
将是一个固定的数字,如果你知道需要比较的类型,并且不希望出现任何意外的转换,那么为什么不把输入的值解析成一个数字呢?有很多方法可以剥猫皮。但这里,OP说“我一直试图避免使用双重相等,而是选择了三重相等。”考虑到这一点,OP更愿意使用
Number(howManyTasksToRemoveInput.value)==tasks.length
howManyTasksToRemoveInput.valueAsNumber==tasks.length
。数量“要删除的任务数”无论如何,真的应该是一个数字。你的观点是什么?当然
==
可以被
==
取代,这就是为什么很多使用linters的人强制只使用
==
的原因。Javascript中没有一个地方可以接受
=
不能使用
==/code>。我的观点是,自Java以来就是这样脚本变得很简单。我不明白你的意思。OP选择避免使用
==
而支持
==
,并询问何时使用
==
有意义(如果你总是可以使用更严格的等式,或使用更一致的数据类型等)。“
==
可以被
==
取代。”“没有一个地方[…]”反对使用
==
。这正是我的观点。事实上,JavaScript被设计成一种简单的语言可能是
==
存在的一个很好的理由。@Xufox gotcha,添加了一个总结,以准确回答问题