我正在使用 JSLint 浏览 JavaScript,当比较 idSele unvehtype 时,它返回了许多建议,可以用 ===替换== 。 If 语句中的idSele_UNVEHtype.value.length == 0 。
更换是否有性能好处?
任何性能改进都将受到欢迎,因为存在许多比较运算符。
如果没有类型转换发生,是否会有性能提升?
Identity (===))运算符的行为与 equality (==)运算符相同,只不过没有进行类型转换,而且类型必须相同才能被视为同等。
执行任何必要的类型转换后,==运算符将比较是否相等。==运算符将不进行转换,因此如果两个值不是同一类型==只返回false。两者都同样迅速。
对于引用类型 == 和===相互一致的行为(特殊情况除外)。
var a = [1,2,3];var b = [1,2,3];
var c = { x: 1, y: 2 };var d = { x: 1, y: 2 };
var e = "text";var f = "te" + "xt";
a == b // false
a === b // false
c == d // false
c === d // false
e == f // true
e === f // true
特殊情况是,由于 toString 或 valueOf 方法,将文字与计算结果相同的对象进行比较时。例如,考虑字符串文本与 String 构造函数创建的字符串对象的比较。
"abc" == new String("abc") // true"abc" === new String("abc") // false
这里,==运算符检查两个对象的值并返回true,但===发现它们不是同一类型并返回false。哪一个是正确的?这取决于你想比较什么。我的建议是完全绕过这个问题,不要使用String构造函数来创建字符串对象。
使用== 运算符(相等)
true == 1; //true, because 'true' is converted to 1 and then compared"2" == 2; //true, because "2" is converted to 2 and then compared
使用(Identity)===
true === 1; //false"2" === 2; //false
这是因为相等运算符确实会进行类型强制,这意味着解释器在进行比较之前会隐式地尝试转换值。
另一方面,标识运算符不进行类型强制,因此在比较时不转换值,因此在跳过一个步骤时速度更快
== 和===之间相等比较的一个有趣的图形表示。
来源: http://dorey.github.io/JavaScript-Equality-Table/
var1 === var2
当使用 JavaScript 相等性测试时,一切都保持原样。 在进行评估之前,不会对任何内容进行转换。
var1 == var2
当使用 JavaScript 相等性测试时,会发生一些时髦的转换。
这个故事的寓意:
Use === unless you fully understand the conversions that take place with ==.
除非您完全理解,那就用===,否则就用==
我就不说那么多技术问题啦。
其实最应该的最提倡的就是绝对相等了(===),它同时考虑了数据类型,这样可以使我们的js代码逻辑更严谨。如果只是弱相等(==),不考虑数据类型的话js逻辑有时真的会出事,所以建议楼主使用===。