代码之家  ›  专栏  ›  技术社区  ›  7wp

为什么在javascript==,中允许这些是一个坏主意!=,++,

  •  15
  • 7wp  · 技术社区  · 15 年前

    我在结账离开 JSLint 一些规则激起了我的兴趣。尤其是:

    不允许==和!=

    不允许+和--

    为什么不允许这些是个坏主意?我明白第一部分,基本上它想让我做 === 而不是 == . 我不明白 为什么? 不过。 我明白这两者的区别,我只是想知道为什么这是不好的做法。有时我真的很想做 = 例如,这样它就可以对 undefined == null

    第二个,我完全不明白。它是否希望我执行myint+=1而不是myint++?

    谢谢!

    7 回复  |  直到 14 年前
        1
  •  4
  •   lucas1000001    15 年前

    Douglas Crockford(写jslint的人)在这段视频中解释了自己:

    http://www.youtube.com/watch?v=hQVTIJBZook#t=14m45s

    但基本上(就像其他人提到的那样),这是因为强制类型。

    值得看世界卫生组织的视频诚实-非常有趣和有用。

        2
  •  12
  •   Christian C. Salvadó    15 年前

    我不太同意这些规定,而不反对使用 == ,我建议 学习 关于类型强制。

    克罗克福德想要避免的主要原因 = 是否根据操作数类型的比较规则可以使此运算符 非传递的 例如,如果:

    A == B AND
    B == C
    

    不保证:

    A == C
    

    一个真实的例子:

    '0' == 0; // true
     0 == '';   // true
    '0' == ''; // false
    

    严格的 === 当您比较同一类型的值时,不必使用运算符,例如:

     if (typeof foo == "function") { }
    

    我们比较了 typeof 操作员,即 总是 一个字符串,带有字符串文本…

    另一个例子,当你将某件事与 null , = 也比较 undefined 例如:

    if (something == null) {}
    

    VS

    if (something === null || typeof something === "undefined") {}
    

    上面的两个条件在末尾是等价的,但是第一个条件更易于阅读,当然,如果您知道类型强制和如何 = 表现。

    学习如何 = 接线员工作时,会帮助你明智地决定使用哪一种。

    推荐文章:

        3
  •  10
  •   Greg Hewgill    15 年前

    DougCrockford对JavaScript中的“好”和“坏”有自己的想法。相应地,JSlint实现了这些检查,但如果您不完全同意他的观点,则使它们成为可选的。

    不允许的 == 有助于防止你在真正意义上犯错误 === . 当然,这是假设你从未真正想使用 = .

    不允许的 ++ -- 是一种风格,有些人认为他们比 += 1 -= 1 .

        4
  •  3
  •   user113292    15 年前

    instructions :

    =和!=运算符在比较之前执行类型强制。这是错误的,因为它导致'\t\r\n'==0为真。这会掩盖类型错误。

    众所周知,++(递增)和——(递减)操作符通过鼓励过度的欺骗而导致了错误的代码。他们是仅次于错误的架构,使病毒和其他安全威胁。有一个plusplus选项禁止使用这些运算符。

        5
  •  2
  •   Guffa    15 年前

    这个 == != 如果需要,运算符执行运算符的隐式转换,而 === !== 运算符没有。表达式 4 == '4' 例如,当表达式 4 === '4' 将是假的。

    最好您应该知道要处理的数据类型,以便在代码中进行适当的比较。

    这个 ++ -- 如果运算符单独用于语句中,则不会导致任何问题,但它们通常用于以不太明显的方式生成一个执行多个操作的语句,例如:

    arr[++idx] = 42;
    

    更清楚的是:

    idx += 1;
    arr[idx] = 42;
    
        6
  •  1
  •   Jose Diaz    15 年前

    标准相等运算符(==和!的行为=)取决于javascript版本。所以这是不使用它们的一个原因。

    另一个原因是,=的行为往往非常模糊。

    https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators

        7
  •  0
  •   David Murdoch    15 年前

    我理解 == . (the undefined == null 这是个例外)

    ("0" == false) === true
    ("0" === false) === false
    

    我从来都不明白 ++ -- 尽管如此。我不喜欢这样 i+=1 在我的代码上(它比 ++i )