如何在JS中检查值是否为空且不是空字符串

时间:2017-04-09 17:26:25

标签: javascript

在Javascript中是否检查值是否为空且不是空字符串?我正在使用以下一个:

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

但我想知道是否还有其他更好的解决方案。感谢。

11 个答案:

答案 0 :(得分:72)

如果你真的想确认一个变量不是null而不是一个特殊的空字符串,你会写:

if(data !== null && data !== '') {
   // do something
}

请注意,我更改了您的代码以检查类型是否相等(!== | ===)。

但是,如果您只是想确保代码只能运行"合理的"价值观,那么你可以像其他人已经说过的那样,写下:

if (data) {
  // do something
}

因为在javascript中,空值和空字符串都等于false(即null == false)。

这两部分代码之间的区别在于,对于第一部分,每个非特定空值或空字符串的值都将进入if。但是,在第二个上,每个真实值都将进入iffalse0nullundefined和空字符串,不会

答案 1 :(得分:10)

setSearchText(event) { let searchText = event.nativeEvent.text; this.setState({searchText}); data = dataDemo let filteredData = this.filterNotes(searchText, data); const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); this.setState({ dataSource: ds.cloneWithRows(filteredData), rawData: data, }); } 和空字符串都是JS中的虚假值。因此,

null

完全足够了。

虽然有一方面的注释:我会避免在我的代码中有一个可以在不同类型中显示的变量。如果数据最终是一个字符串,那么我最初会用空字符串定义我的变量,所以你可以这样做:

if (data) { ... }

没有null(或任何奇怪的东西,如if (data !== '') { ... } )阻碍。

答案 2 :(得分:4)

if (data?.trim().length > 0) {
   //use data
}

如果数据为?.undefinednullish),则null optional chaining operator将短路并返回undefined if表达式中为false。

答案 3 :(得分:2)

null和empty都可以按如下方式验证:

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

答案 4 :(得分:1)

我经常测试真实值以及字符串中的空白:

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

如果您的字符串包含一个或多个空白,它将计算为true。

答案 5 :(得分:1)

在本质上,如果我们将代码编码为空,则可能意味着以下任何一种情况;

  • 数字值为0
  • 0.0等于浮点值
  • “ 0”与字符串值一样
  • “ 0.0”与字符串值一样
  • null等于Null值,可能还会捕获未定义或未捕获的
  • 未定义为未定义的值
  • false表示虚假的真实值,机会0也表示真实性,但是如果我们想按原样捕获false,该怎么办
  • ''空字符串值,无空格或制表符
  • ''仅带有空格或制表符的字符串

如OP所述,在现实生活中,我们可能希望对它们进行全部测试,或者有时我们可能仅希望对有限的一组条件进行测试。

通常if(!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;};`

解决方案背后的逻辑是函数具有两个参数 a b ,a是我们需要检查的值,b是具有设置条件的数组,需要从中排除上面列出的预定义条件。 b的默认值设置为空数组[]。

该函数的第一步是检查b是否为数组,如果不是,则尽早退出该函数。

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

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

Gotcha 如果我们要将a转换为字符串进行比较,则0和0.0可以正常运行,但是Null和Undefined将通过错误阻止整个脚本来运行。我们需要边缘案例解决方案。如果不满足第一个条件,下面的简单 || 会覆盖边缘情况。如果不符合要求,则再次运行一次包括include的提前检查。

if(conditions.includes(a)||  (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim())))

trim()函数将覆盖更宽的空白,并且制表符仅适用于值,并且仅在边缘情况下起作用。

发挥作用

function empty (a,b=[]){
if(!Array.isArray(b)) return;
conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
if(conditions.includes(a)|| 
(['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
 return true;
} 
return false;
}

console.log('1 '+empty());
console.log('2 '+empty(''));
console.log('3 '+empty('      '));
console.log('4 '+empty(0));
console.log('5 '+empty('0'));
console.log('6 '+empty(0.0));
console.log('7 '+empty('0.0'));
console.log('8 '+empty(false));
console.log('9 '+empty(null));
console.log('10 '+empty(null,[null]));
console.log('11 dont check 0 as number '+empty(0,['0']));
console.log('12 dont check 0 as string '+empty('0',['0']));
console.log('13 as number for false as value'+empty(false,[false]));

让它变得复杂-如果我们要比较的值是数组自身,并且可以嵌套得尽可能深,那该怎么办。如果我们要检查数组中的任何值是否为空,那可能是一个边缘业务案例。

function empty (a,b=[]){
    if(!Array.isArray(b)) return;

    conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
    if(Array.isArray(a) && a.length > 0){
    for (i = 0; i < a.length; i++) { if (empty(a[i],b))return true;} 
    } 
    
    if(conditions.includes(a)|| 
    (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
     return true;
    } 
    return false;
    }

console.log('checking for all values '+empty([1,[0]]));
console.log('excluding for 0 from condition '+empty([1,[0]], ['0']));

我在框架中采用的简单而广泛的用例功能;

  • 控制在给定情况下空的定义到底是什么
  • 可以控制重新定义空的条件
  • 几乎可以比较字符串,数字,浮点数,真值,空值,未定义和深层数组中的所有内容
  • 提出解决方案时要牢记可重用性和灵活性。如果要处理一种或两种简单情况,所有其他答案都适用。但是,在某些情况下,在上述代码段中进行编码时,空定义的定义总是可以正常工作的。

答案 6 :(得分:0)

尝试 ----------

function myFun(){
var inputVal=document.getElementById("inputId").value;
if(inputVal){
document.getElementById("result").innerHTML="<span style='color:green'>The value is "+inputVal+'</span>';
}
else{
document.getElementById("result").innerHTML="<span style='color:red'>Something error happen! the input May be empty.</span>";
}
}
<input type="text" id="inputId">
<input type="button" onclick="myFun()" value="View Result">
<h1 id="result"></h1>

答案 7 :(得分:0)

代替使用

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

// do something
}

您可以使用以下简单代码

if(Boolean(value)){ 
// do something 
}
  • 直观上为“空”的值(例如0,空字符串,null,undefined和NaN)将变为false
  • 其他值变为真

答案 8 :(得分:0)

我非常烦于专门检查null和空字符串,以至于现在我通常只需编写并调用一个小函数即可为我做这件事。

/**
 * 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

答案 9 :(得分:0)

function validateAttrs(arg1, arg2, arg3,arg4){
    var args = Object.values(arguments);
    return (args.filter(x=> x===null || !x)).length<=0
}
console.log(validateAttrs('1',2, 3, 4));
console.log(validateAttrs('1',2, 3, null));
console.log(validateAttrs('1',undefined, 3, 4));
console.log(validateAttrs('1',2, '', 4));
console.log(validateAttrs('1',2, 3, null));

答案 10 :(得分:0)

检查字符串是否为 undefinednull"" 的简单解决方案:-

const value = null;
if(!value) {
  console.log('value is either null, undefined or empty string');
}