我使用JSLint通过JavaScript,它返回了许多建议,以取代 ==(两个平等的标志)与 ===(三个平等的标志)当做一些事情,如比较idSele_UNVEHtype.value.length == 0在一个假设声明。

能否取代 = = = = = = =?

任何性能改进都将被欢迎,因为有许多比较运营商。

如果没有类型转换发生,会有超越 ==的性能收益吗?


当前回答

平等比较运营商 ==是混乱的,应该避免。

如果你必須與它一起生活,請記住以下三件事:

它不是过渡的:(a ==b)和(b ==c)不会导致(a ==c)它是相互排斥它的否认:(a ==b)和(a!=b)总是保持相反的布莱恩值,所有A和B。

平等运营商在JavaScript中的真实表格

表中的每个行都是三个相互“平等”值的组合,这意味着它们之间的任何2个值都是平等的,使用平等的 ==标志*。

** 奇怪:请注意,第一列中的任何两个值在这个意义上不平等。

''       == 0 == false   // Any two values among these 3 ones are equal with the == operator
'0'      == 0 == false   // Also a set of 3 equal values, note that only 0 and false are repeated
'\t'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\r'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\n'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\t\r\n' == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

null == undefined  // These two "default" values are not-equal to any of the listed values above
NaN                // NaN is not equal to any thing, even to itself.

其他回答

我的理性过程使用eMAcs org-mode和node.js进行测试。

| use ==     | '' | '0' | false | 'false' | undefined | null | ' \t\r\n ' |
| ''         | x  | f   | t     | f       | f         | f    | f          |
| '0'        |    | x   | t     | f       | f         | f    | f          |
| false      |    |     | x     | f       | f         | f    | t          |
| 'false'    |    |     |       | x       | f         | f    | f          |
| undefined  |    |     |       |         | x         | t    | f          |
| null       |    |     |       |         |           | x    | f          |
| ' \t\r\n ' |    |     |       |         |           |      | x          | 



| use ===    | '' | '0' | false | 'false' | undefined | null | ' \t\r\n ' |
| ''         | x  | f   | f     | f       | f         | f    | f          |
| '0'        |    | x   | f     | f       | f         | f    | f          |
| false      |    |     | x     | f       | f         | f    | f          |
| 'false'    |    |     |       | x       | f         | f    | f          |
| undefined  |    |     |       |         | x         | f    | f          |
| null       |    |     |       |         |           | x    | f          |
| ' \t\r\n ' |    |     |       |         |           |      | x          |

下面的我的测试脚本:运行 > node xxx.js

var rowItems = ['', '0', false, 'false', undefined, null, ' \t\r\n ']
var colItems = rowItems

for(var i = 0; i < rowItems.length; i++) {
    for (var j = 0; j < colItems.length; j++) {
        var r = (rowItems[i] === colItems[j]) ? true : false;
        console.log(rowItems[i] + " = " + colItems[j] + " " + r + " [" + i + "] ==> [" + j + "]")
    };
}

JSLint 有时会给你一些不现实的理由来改变事物。 === 具有与 == 相同的性能,如果类型已经相同。

它只有当类型不相同时更快,在这种情况下它不会尝试转换类型,而是直接返回虚假。

因此,IMHO,JSLint可能用来写新的代码,但无用的过度优化应该以任何代价避免。

也就是说,在一个检查中没有理由改变 == 到 === 如果(一个 == 测试)当你知道它是因为一个可以只是一个线条。

修改大量的代码会浪费开发人员和评论家的时间,并无所得。

=== 运营商检查值以及变量的类型,以便平等。

操作员只检查平等变量的值。

使用一个未提到的理由 === - 是你与 / 交叉编写到 / 从咖啡脚本共存的情况。

JavaScript 的弱平等比较有某种混乱的行为,并且往往是混乱的错误的来源。 解决方案是使用严格的平等运营商,由三个平等标志组成: ===. 它就像正常的平等运营商一样工作,但没有任何类型的强迫。

如果你经常转换到和从咖啡脚本,你应该只使用 ===。

CoffeeScript 解决了这一点,简单地将所有弱的比较与严格的比较相替代,换句话说,将所有 ==比较器转换为 ===. 在 CoffeeScript 中,你不能进行弱的平等比较,并且在需要时比较之前,你应该明确地转换类型。

javascript 是一个弱点编写的语言,即没有任何数据类型,如在 C、c++ 例如 int、boolean、 float 等,因此一个变量可以持有任何类型的值,这就是为什么这些特殊的比较操作员在那里。

艾格

var i = 20;var j = "20";

如果我们应用比较运营商,这些变量结果将是

i==j //result is true

j != i//result is false

为此,我们需要一个特殊的比较运营商,检查值以及变量的数据类型。

如果我们做

i===j //result is false