使用丢失定义的变量的JavaScript和其他语言

时间:2012-08-21 20:08:48

标签: javascript variables

嘿那些在专业环境中使用JavaScript的人。我想在使用==和===运算符比较值时知道标准。我正在观看视频,解释说如果你将sting与值'5'和一个值为5的int进行比较,它会使用==运算符返回true。然后他们建议使用===作为一切。我知道这是错误的,因为如果你想比较嵌套在一些多态对象中的一些值与不同的类型defs说一个是学生而另一个是教师===总是返回false。

经过深思熟虑后,我得出的结论是,尽可能使用===,只在必要时使用==。

您能否告诉我一些关于专业环境中经验法则的见解?

3 个答案:

答案 0 :(得分:4)

规则很简单:

始终使用===!==,除非您明确要求允许类型转换并考虑该类型转换的后果。换句话说,您应该几乎一直使用===!==


多态对象的例外不适用,因为=====在比较两个对象时都需要两个对象作为完全相同的对象。在这种情况下没有类型转换。如果要比较多态对象的两个属性,则只查看属性的类型,而不是包含对象的类型。


有关==类型转化的详细规则,请参阅此http://es5.github.com/#x11.9.3。有一些奇怪的事情是这样的:

var x;              // x is undefined
alert(x == null);​   // alerts true

答案 1 :(得分:1)

查看http://jshint.com,这有助于实施这些最佳做法。他们(以及其他所有人)建议使用===

我很少想到使用==优于===的理由。

这是使用===的一个奇特示例,即使==感觉更容易。

var person = {
    name: "Cody",
    age: "44"
}

var targetAge = 40;

// explicit type conversion, no wonder what's happening
if (parseInt(person.age, 10) === targetAge) {
    alert("You won!")
} else {
    alert("Sorry You Lost!");
}

另请参阅:JavaScript: The Good PartsMaintainable JavaScript,它们也推荐这种做法。

答案 2 :(得分:0)

它常用于此类陈述中:

var x = 0;
if(x == false) {
   // this will be executed   
}
if(x === false) {
   // this not
}
if(false == '') {
  // this will be executed
}
if(false === '') {
  // this not
}

另一个例子 - 在错误时返回FALSE或在成功时返回string的函数

function foo(bar) {
   // magic
   return ''; // this is SUCCESS
}
var result = foo(123);
if(result === false) {
  // omg error!!
}else{
  // some string returned, event empty one is OK
}

老实说,在语句中使用===非常罕见