请考虑以下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,那么为什么开发人员选择使用!==而不是!=?我的理解是否正确,两者都适用于此?
答案 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。
在大多数情况下,最好避免==
并始终坚持===
。