Javascript中的0,false,null,undefined,空字符串对比

本文探讨了JavaScript中不同类型的值(如布尔值、数值、字符串、对象、undefined)的特性,并通过实例演示了如何使用ECMAScript等性运算符进行判断。同时,还详细解释了null与undefined的区别。

先看一段代码:

<script type="text/javascript">
    alert(typeof (false) === "boolean");   //true
    alert(typeof (0) === "number");      //true
    alert(typeof ("") === "string");    //true
    alert(typeof (null) === "object");  //true
    alert(typeof (undefined)=== "undefined"); //true
</script>
上面这段代码中:false 、0、空字符串、null、undefined依次指待的是:布尔值,数值,字符串,对象,undefined类型。


所以0,false,null,undefined,空字符串都不是指待的同一个概念,不要弄混。

下面我们使用ECMAScript 等性运算符 来做一下运算判断。


<script type="text/javascript">
    alert(false == 0);  //true
    alert(""==0);       //true
    alert(null==0);//false
    alert(undefined==0); //false
    alert(0==0);
</script>


从上面的结果可以得出0只能代表数字,字符串和布尔值。不能用来代替对象和undefined。不过在判断字符串的时候可以通过字符串的长度来判断,把字符串转换为number。


<script type="text/javascript">
    alert(false == undefined);   //false
    alert(false == null);   //false
    alert(false == 0);    //true
    alert(false == "");   //true
    alert(null == undefined);//true
</script>
false可以用来代替0和空字符串。但是null与undefined具体有和区别呢?
null和undefined其实两个都是对象。undefined表示无效对象,null表示空对象。如果变量显式或者隐式(由Javascript引擎进行赋值)地被赋予了undefined,那么代表了此变量未被定义,如果被赋予null值,则代表此变量被初始化为空值。

<script type="text/javascript">
    var a;
    alert(a);//undefined </script>
其实变量如果声明了但是没有初始化,那么Javascript引擎会将此变量自动指向undefined对象。就像上面那段代码一样。

最后希望这份手记能够给你带来方便。



转载于:https://my.oschina.net/websec/blog/156478

<think>首先,用户的问题是:“我想查找如何使用JavaScript判断变量既不为null也不为空字符的方法请问javascriptcheckvariableisnotnullandnotemptystring”。所以,我需要提供JavaScript中检查变量既不是null也不是空字符的方法。系统级指令:-所有行内数学表达式使用$...$格式,但这个问题是关于JavaScript的,没有数学表达式,所以我可能不需要使用这个。-独立公式必须使用$$...$$格式,但同样,这里没有公式。-LaTeX语法正确:再次,不适用。-使用中文回答:是的,我必须用中文回复。-生成相关问题:在回答结束时,我需要生成相关问题。-回答中引用的段落末尾自然地添加引用标识:用户提供了几个引用([^1]到[^5]),我需要引用它们。引用应该是自然的。用户可见层:-回答结构清晰,帮助用户逐步解决问题。-保证回答真实可靠:基于JavaScript知识。用户提供的引用:-[^1]:讨论传递非字符值到测试函数,比如(0=="")为真,但0不是空或null。-[^2]:检查JavaScript中的undefinednull和空变量,区分undefined变量和undefined属性。-[^3]:讨论nullundefined的区别,建议使用null表示空缺。-[^4]:JavaScript类型转换,简化判断,如if(str)可以检查字符是否为空。-[^5]:比较符(==vs===),条件语句和循环。这些引用是关于JavaScript变量检查的,所以我应该整合这些信息到我的回答中。核心问题:如何检查变量既不是null也不是空字符。在JavaScript中,检查变量不是null且不是空字符的常见方法:1.使用严格比较:`variable!==null&&variable!==''`。2.利用类型转换:由于空字符null在布尔上下文中都是falsy,但0false也是falsy,所以直接`if(variable)`可能不够,因为它会过滤掉0false等。-用户想排除null空字符,但可能允许0false?用户说“既不为null也不为空字符”,所以只关心null空字符,不关心其他falsy值。-因此,直接`if(variable)`可能不合适,因为如果variable是0,它也会被当false。最好使用明确检查:-`if(variable!==null&&variable!==undefined&&variable!=='')`但用户只提到null空字符,所以undefined可能也需要考虑?用户说“既不为null也不为空字符”,没有提到undefined,但引用中讨论了undefined。用户问题:“判断变量既不为null也不为空字符”,所以焦点在null空字符。但引用中提到了undefined,所以可能我需要覆盖。在JavaScript中,空字符是'',nullnull。一个健壮的方法:-检查变量不是null,也不是空字符:`variable!==null&&variable!==''`。-但变量可能未定义(undefined),用户可能也想排除它?问题中没有指定,但通常在这种上下文中,我们可能也想排除undefined。引用[^2]和[^3]讨论了undefined。所以,安全的方法是检查变量既不是null,也不是undefined,也不是空字符。但用户明确说“不为null也不为空字符”,所以我应该优先遵循用户的要求。在回答中,我可以解释:-基本方法:`if(str!==null&&str!=='')`。-但考虑undefined:`if(str!=null&&str!=='')`,因为`str!=null`检查nullundefined(因为null==undefined为真,但null===undefined为假)。-或者更严格:`if(str!==null&&str!==undefined&&str!=='')`。引用[^4]提到简化判断:`if(str)`,但`if(str)`在str是nullundefined、''、0false时都为假,所以如果用户只关心null空字符,但允许0,则`if(str)`不准确。例如,如果str是0,`if(0)`为假,但0不是null也不是空字符。所以,我需要根据用户需求定制。用户说“判断变量既不为null也不为空字符”,所以变量可以是数字、对象等,但检查时只排除null空字符。因此,正确的方法是:-检查变量不是null且不是空字符:`variable!==null&&variable!==''`。但变量可能未声明或未定义?在JavaScript中,如果变量未声明,访问它会抛出错误,所以通常我们假设变量已声明。在函数中,参数可能为undefined。最佳实践:使用`typeof`检查undefined。所以,全面的检查:-`if(typeofvariable!=='undefined'&&variable!==null&&variable!=='')`但用户只提到null空字符,所以或许简化。引用[^5]提到严格比较。我可以建议:-使用`variable!=null`来检查不是nullundefined(因为`null==undefined`),然后检查不是空字符。所以:`if(variable!=null&&variable!=='')`这确保variable不是nullundefined,也不是空字符。如果variable是0false等,它会被包括,因为`0!=null`为真,`0!==''`为真。例子:-如果variable是null:`null!=null`假,跳过。-如果variable是undefined:`undefined!=null`假,跳过。-如果variable是'':`''!=null`真,但`''!==''`真?等等,`variable!==''`是检查不等于空字符,所以如果variable是'',`''!==''`假。`variable!=null&&variable!==''`:-variable=null:false&&...->false-variable=undefined:false&&...->false-variable='':true&&false->false-variable='hello':true&&true->true-variable=0:true&&true->true(因为0!=='')-variable=false:true&&true->true完美,这符合“既不为null也不为空字符”,允许其他值。如果用户也想排除undefined,这已经包括了。在引用中:-[^1]提到0==""为真,但使用严格比较避免。-[^2]区分undefined变量和属性。-[^3]讨论nullundefined。-[^4]提到if(str)简化,但警告类型转换。-[^5]比较符。所以,在回答中,我可以引用这些。回答结构:1.解释问题:如何在JavaScript中检查变量既不是null也不是空字符。2.提供方法:使用`variable!=null&&variable!==''`。-解释为什么:`variable!=null`检查nullundefined(因为宽松相等),`variable!==''`严格检查不是空字符。3.讨论其他方法,如if(variable),但指出它可能太宽泛。4.提供代码示例。5.结束时生成相关问题。生成相关问题:基于主题,如JavaScript变量检查、类型转换等。引用添加:在相关段落末尾自然地添加引用标识。例如,当提到类型转换时,引用[^4]。完整回答:</think>### 如何用 JavaScript 判断变量既不为 null 也不为空字符JavaScript 中,判断一个变量既不是 `null` 也不是空字符(`''`)是常见需求,尤其在表单验证或数据处理中。这需要精确检查,因为 JavaScript 的类型转换机制可能导致意外结果(例如 `0 == ""` 为 `true`,但严格比较下为 `false`)。下面我将一步步解释可靠的方法,并提供代码示例。核心思路是结合宽松比较(检查 `null` 和 `undefined`)和严格比较(检查空字符),以确保准确性和健壮性。 #### 推荐方法:使用 `!= null` 和 `!== ''` 最可靠的方法是使用 `variable != null` 结合 `variable !== ''`。 - **`variable != null`**:这是一个宽松比较,它会检查变量是否为 `null` 或 `undefined`(因为 `null == undefined` 返回 `true`)。这覆盖了“虚无”值,避免未定义变量导致的错误[^2][^3]。 - **`variable !== ''`**:这是一个严格比较,确保变量不是空字符(`''`)。使用 `!==` 而非 `!=` 可以防止类型转换,例如数字 `0` 不会被误判为空字符[^1][^5]。 代码示例: ```javascript function isNotNullOrEmpty(variable) { return variable != null && variable !== ''; } // 测试用例 console.log(isNotNullOrEmpty(null)); // falsenull) console.log(isNotNullOrEmpty(undefined)); // falseundefined) console.log(isNotNullOrEmpty('')); // false空字符) console.log(isNotNullOrEmpty('Hello')); // true(非空字符) console.log(isNotNullOrEmpty(0)); // true(数字0,允许) console.log(isNotNullOrEmpty(false)); // true(布尔false,允许) console.log(isNotNullOrEmpty({})); // true(对象,允许) ``` - **为什么有效?** - 如果变量是 `null` 或 `undefined`,`variable != null` 返回 `false`,跳过后续检查。 - 如果变量是空字符,`variable !== ''` 返回 `false`。 - 其他值如 `0`、`false` 或非空字符都返回 `true`,符合“只排除 `null` 和空字符”的要求。 #### 为什么不建议使用简化写法(如 `if (variable)`)? 一些简化方法(如 `if (variable)`)利用 JavaScript 的“falsy”特性(`null`、`undefined`、`''`、`0`、`false` 等在布尔上下文中为 `false`),但这种方法太宽泛: - **问题**:它会错误地排除 `0`、`false` 等有效值,而用户可能只想排除 `null` 和空字符[^4][^5]。 - **示例**: ```javascript if (variable) { // 当 variable 为 0false 时,不会执行这里,但用户可能希望允许这些值 } ``` 因此,在需要精确控制的场景下,推荐使用显式比较(`!= null` 和 `!== ''`)。 #### 其他注意事项 - **变量未声明问题**:如果变量可能未声明(如全局变量),使用 `typeof variable !== 'undefined'` 先检查存在性,避免 `ReferenceError`[^2]。例如: ```javascript if (typeof variable !== 'undefined' && variable != null && variable !== '') { // 安全处理 } ``` - **性能**:这种方法在大多数场景下性能良好,但若在高频循环中使用,可考虑优化(如缓存变量值)。 - **引用说明**:本方法综合了 JavaScript 的类型转换规则和严格比较最佳实践[^1][^5]。 ### 相关问题 1. 如何在 JavaScript 中区分 `null` 和 `undefined`? 2. JavaScript 中还有哪些方法可以检查空值或无效值? 3. 类型转换在 JavaScript 条件判断中如何影响结果? 通过以上方法,您可以安全地检查变量既不为 `null` 也不为空字符。如果您有更多场景(如处理数组或对象),我可以进一步扩展!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值