Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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 为什么要与typeof的返回值进行严格比较_Javascript - Fatal编程技术网

Javascript 为什么要与typeof的返回值进行严格比较

Javascript 为什么要与typeof的返回值进行严格比较,javascript,Javascript,人们倾向于写作 if (typeof(value) === "undefined") { /* something */ } 但为什么要使用严格的比较呢?typeof的计算结果总是字符串,不是吗 什么东西不用 if (typeof(value) == "undefined") { /* something */ } ?在这种情况下,它不是严格必要的-正如您所说的typeof总是返回一个字符串,但同样没有令人信服的理由使用=。我怀疑大多数人只是养成了在默认情况下使用严格等于的习惯,这就

人们倾向于写作

if (typeof(value) === "undefined")
{
  /* something */
}
但为什么要使用严格的比较呢?typeof的计算结果总是字符串,不是吗

什么东西不用

if (typeof(value) == "undefined")
{
  /* something */
}

在这种情况下,它不是严格必要的-正如您所说的
typeof
总是返回一个字符串,但同样没有令人信服的理由使用
=
。我怀疑大多数人只是养成了在默认情况下使用严格等于的习惯,这就是为什么在这种情况下更常用它的原因

  • 我们所知道的良好实践是使用严格的比较(这是我们应该养成的习惯!)

  • 有些情况与您在示例中展示的情况类似,可能不需要使用严格的比较(在这里您可以看到我们不需要
    ==

  • 在这种情况下,即
    typeof(value)
    ,使用
    =
    ==
    没有区别,因此将
    ==
    作为一种习惯将是一种很好的做法


  • 请参阅关于这个问题的公认答案:在您的示例中,使用严格比较的原因之一是,读者并不总是确定
    typeof
    实际上总是返回字符串,就像它不返回给您一样。接下来,如果在您的示例中使用了
    =
    ,您可能会想“嗯,也许
    typeof
    可以返回一个非字符串值,当强制为字符串时,该值的计算结果为未定义?”:)@bzlm—“对于读者来说,typeof实际上总是返回字符串,这并不总是确定的”,这是一个相当轻薄的稻草人。这种行为从一开始就在语言规范中定义,并且没有已知的非确认用户代理(可能从来没有),因此任何这样的读者都不应该编写重要的代码。那不必要的括号呢?这样的读者会认为typeof是一个函数吗?;-)“人们倾向于写”是吗?“为什么使用严格比较”可能是因为那些人希望ECMAScript是严格类型的,并且对抽象比较算法(后者适用于有影响力的道格拉斯·克罗克福德)感到不满。请注意,括号是多余的。;-)JSLint和JSHint可能影响了这些习惯。:==是无字符的,表示我们已经知道类型相等。这样的小信号本身就有价值。我们似乎不同意良好的适应性,对我来说,检查值+类型和检查值+检查值之间没有区别。以防万一,==是一个无字符的符号,表示我们已经知道类型相等,这是重要的信息。