Javascript 如何检查JS中的值是否为null和非空字符串

Javascript 如何检查JS中的值是否为null和非空字符串,javascript,Javascript,在Javascript中是否有检查值是否为null和空字符串?我正在使用下面的一个: var data; //get its value from db if(data != null && data != '') { // do something } 但我想知道是否还有更好的解决办法。谢谢。如果您确实想确认某个变量不是null,也不是空字符串,您可以这样写: if(data !== null && data !== '') { // do so

在Javascript中是否有检查值是否为null和空字符串?我正在使用下面的一个:

var data; //get its value from db 
if(data != null && data != '') {
   // do something
}

但我想知道是否还有更好的解决办法。谢谢。

如果您确实想确认某个变量不是null,也不是空字符串,您可以这样写:

if(data !== null && data !== '') {
   // do something
}
请注意,我更改了代码以检查类型是否相等(
!=
|
==

但是,如果您只是想确保代码只针对“合理”值运行,那么您可以如其他人所述编写:

if (data) {
  // do something
}
因为,在javascript中,null值和空字符串都等于false(即
null==false


这两部分代码之间的区别在于,对于第一部分,每个不是专门为null或空字符串的值都将输入
if
。但是,在第二种情况下,每个true-ish值都将输入
if
false
0
null
未定义的
和空字符串,而在JS中都不是假值。所以,

if (data) { ... }
这完全足够了

不过还有一点需要注意:我会避免在代码中使用可能以不同类型显示的变量。如果数据最终将是一个字符串,那么我将首先用一个空字符串定义我的变量,因此您可以这样做:

if (data !== '') { ... }

没有空值(或任何奇怪的东西,如
data=“0”
)的阻碍。

空值和空值都可以按如下方式进行验证:

<script>
function getName(){
    var myname = document.getElementById("Name").value;
    if(myname != '' && myname != null){
        alert("My name is "+myname);
    }else{
        alert("Please Enter Your Name");
    }       
}

函数getName(){
var myname=document.getElementById(“名称”).value;
如果(myname!=''&&myname!=null){
警报(“我的名字是”+我的名字);
}否则{
警告(“请输入您的姓名”);
}       
}

试试看----------

函数myFun(){
var inputVal=document.getElementById(“inputId”).value;
如果(输入值){
document.getElementById(“结果”).innerHTML=“值为”+inputVal+”;
}
否则{
document.getElementById(“结果”).innerHTML=“发生错误!输入可能为空。”;
}
}

而不是使用

if(data !== null && data !== ''  && data!==undefined) {

// do something
}
您可以使用下面的简单代码

if(Boolean(value)){ 
// do something 
}
  • 直观上为“空”的值(如0、空字符串、null、未定义和NaN)将变为false
  • 其他价值观变为现实

我经常测试truthy值以及字符串中的空格:

if(!(!data || data.trim().length === 0)) {
  // do something here
}

如果你有一个由一个或多个空格组成的字符串,它的计算结果将为true。

我已经厌倦了专门检查空字符串和空字符串,所以我现在通常只编写并调用一个小函数来完成这项工作

/**
 * Test if the given value equals null or the empty string.
 * 
 * @param {string} value
**/
const isEmpty = (value) => value === null || value === '';

// Test:
isEmpty('');        // true
isEmpty(null);      // true
isEmpty(1);         // false
isEmpty(0);         // false
isEmpty(undefined); // false

?。
将短路并返回
未定义的
,如果数据是
空的
空的
未定义的
),这将在
if
表达式中计算为false。

当我们在本质上编码为空时,在给定的情况下可能意味着以下任何一种情况

  • 数值为0
  • 0.0作为浮点值
  • 字符串值中的“0”
  • 字符串值中的“0.0”
  • null作为null值,它也可能捕获未定义的,也可能不捕获
  • 未定义为未定义的值
  • 假如假,假如假,假如假,假如假如假,假如假如假,但如果我们想抓住假如假呢
  • “”为空,没有空格或制表符
  • “”字符串,仅带空格或制表符
在实际生活中,如OP所述,我们可能希望测试所有这些条件,或者有时我们可能只希望测试有限的条件集

通常
如果(!a){return true;}
在大多数情况下都能满足其目的,但是它不会覆盖更广泛的条件集

另一个成功的黑客是
return(!value | | value==undefined | | value==“”| | value.length==0)

但如果我们需要控制整个过程呢

本机核心JavaScript中没有简单的挥鞭式解决方案,必须采用。考虑到我们放弃了对传统IE11的支持(老实说,即使是windows也应该这样做),这一解决方案在所有现代浏览器中都能奏效

 function empty (a,b=[])
 {if(!Array.isArray(b)) return; 
 var conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
 if(conditions.includes(a)|| (typeof a === 'string' && conditions.includes(a.toString().trim())))
 {return true;};
 return false;};`
解决方案is函数背后的逻辑有两个参数ab,a是我们需要检查的值,b是一个带有设置条件的数组,我们需要从上面列出的预定义条件中排除。默认值b设置为空数组[]

函数的第一次运行是检查b是否为数组,如果不是,则提前退出函数

下一步是从
[null、'0'、'0.0',false、undefined',]
和数组b计算数组差。如果b是空数组,则预定义条件将保持不变,否则它将删除匹配值

条件=[预定义集]-[待排除集] 过滤器功能正是利用了它。 现在我们在数组中设置了条件,我们需要做的就是检查值是否在条件数组中。 includes函数完全不需要编写自己的讨厌循环,让JS引擎来完成繁重的工作

明白了 若我们要将一个字符串转换为一个字符串进行比较,那个么0和0.0将正常运行,但Null和Undefined会通过错误阻塞整个脚本。我们需要边缘案例解决方案。下面简单的|覆盖了第一个条件不满足时的边缘情况。如果未满足要求,运行另一个提前检查通过include将提前退出

if(conditions.includes(a)||  (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim())))
trim()函数将覆盖更宽的空白和制表符值,并且仅在边缘情况下起作用

操场

函数为空(a,b=[]){
如果(!Array.isArray(b))返回;
条件=[null,'0','0.0',false,未定义,'].filter(x=>!b.includes(x));
如果(条件)包括(a)|
(['string','number'].includes(a的类型)和&conditions.includes(a.toStri
if(conditions.includes(a)||  (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim())))
const value = null;
if(!value) {
  console.log('value is either null, undefined or empty string');
}