null与""的问题

        var loginEmail = $.trim($("input[name='email']").val());  
        
       if (loginEmail == null || loginEmail == '邮箱' || loginEmail == "") {  
           $(".smtwarning").empty().text("您的邮箱账号忘记输入了");  
             
           }  
           
           
         这个代码中loginEmail == null与loginEmail == ""不是一个意思吗??
阅读 4.1k
8 个回答

以下内容均摘自《你不知道的javascript(中卷)》

null 和 undefined 之间的 ==涉及隐式转换,在x=y中,ES5 规范 11.9.3.2-3 规定:

  • 如果 x 为 null, y 为 undefined,则结果为 true。

  • 如果 x 为 undefined, y 为 null,则结果为 true。

在 == 中 null 和 undefined 相等(它们也与其自身相等),除此之外其他值都不存在这种
情况,例如:

var a = null;
var b;
a == b; // true
a == null; // true
b == null; // true
a == false; // false
b == false; // false
a == ""; // false
b == ""; // false
a == 0; // false
b == 0; // false

null 和 undefined 之间的强制类型转换是安全可靠的,上例中除 null 和 undefined 以外的
其他值均无法得到假阳( false positive)结果。个人认为通过这种方式将 null 和 undefined
作为等价值来处理比较好。
例如:

var a = doSomething();
if (a == null) {
// ..
}

条件判断 a == null 仅在 doSomething() 返回非 null 和 undefined 时才成立,除此之外其
他值都不成立,包括 0、 false 和 "" 这样的假值。

null表示空对象指针

null == '' // false

另外感觉这里判断有问题吧 前面 var loginEmail = $.trim($("input[name='email']").val()); 这句代码里取出来的不会出现null这样的值吧 直接判断空就好了

不是,null表示“没有对象”,而""表示一个空白的字符串,空白字符串也是对象,只不过字符串里没有字符。

不是一个意思,
""可能是$("input[name='email']").val()取到的值为''或只包含空格的字符串,
null只可能是$("input[name='email']")没有获取到相关元素。

$.trim 的返回值类型只有字符串,所以是不用判断是否为null的。
null"" 是两种类型,不是一个意思。只是转成 boolen 值都是 false 。

所以在JS中判断字符串是否有值应该用!str,当然,str本身应该经过一轮trim

null是javascript的内置对象。值 null 是一个 JavaScript 字面量,表示空值(null or an "empty" value),即没有对象被呈现(no object value is present)。它是 JavaScript 原始值 之一。而《""》是一个char型的值,和'a'、'b'是一样滴。可以看下这里MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题