什么时候可以!=代替使用!==?

时间:2014-05-22 17:48:36

标签: javascript

请考虑以下this AngularJS tutorial中的代码段:

app.factory('Auth',
  function ($firebaseSimpleLogin, FIREBASE_URL, $rootScope) {
    var ref = new Firebase(FIREBASE_URL);

    var auth = $firebaseSimpleLogin(ref);

    var Auth = {
      register: function (user) {
        return auth.$createUser(user.email, user.password);
      },
      signedIn: function () {
        return auth.user !== null;
      },
      logout: function () {
        auth.$logout();
      }
    };

    $rootScope.signedIn = function () {
      return Auth.signedIn();
    };

    return Auth;
  });

我理解!=和!==之间的区别是第一个按引用进行比较,第二个是按值进行比较。由于此处的比较为null,那么为什么开发人员选择使用!==而不是!=?我的理解是否正确,两者都适用于此?

3 个答案:

答案 0 :(得分:5)

== / !=运算符仅比较变量的值,而不是类型

=== / !==运算符会比较变量的类型和值

一些例子:

var varA = 5; // int
var varB = '5'; // string
var varC = 5; // int

if(varA == varB) // true (only value compared)
if(varA === varB) // false: because varB is of type string and varA of type int

if(varA == varC) // true
if(varA === varC) // true: because varA and varC are of the same type and have the same value

答案 1 :(得分:1)

我经常使用“if(x!= null)”来检查x是null还是未定义。它比仅仅说“if(x)”更安全,因为除了null和undefined之外还有其他的假值。

答案 2 :(得分:1)

为方便起见,以下是概述表:http://jsfiddle.net/QQcVw/1/

            0   ""  false   null    undefined
0           Y   Y   Y       n       n
""          Y   Y   Y       n       n
false       Y   Y   Y       n       n
null        n   n   n       Y       Y
undefined   n   n   n       Y       Y    

如您所见,==认为相等的三个空“值”(0,“”和false)和两个“非值”(null和未定义)。有关确切的算法,请参阅javascript standard

在大多数情况下,最好避免==并始终坚持===