在Javascript中是否检查值是否为空且不是空字符串?我正在使用以下一个:
var data; //get its value from db
if(data != null && data != '') {
// do something
}
但我想知道是否还有其他更好的解决方案。感谢。
答案 0 :(得分:72)
如果你真的想确认一个变量不是null而不是一个特殊的空字符串,你会写:
if(data !== null && data !== '') {
// do something
}
请注意,我更改了您的代码以检查类型是否相等(!==
| ===
)。
但是,如果您只是想确保代码只能运行"合理的"价值观,那么你可以像其他人已经说过的那样,写下:
if (data) {
// do something
}
因为在javascript中,空值和空字符串都等于false(即null == false
)。
这两部分代码之间的区别在于,对于第一部分,每个非特定空值或空字符串的值都将进入if
。但是,在第二个上,每个真实值都将进入if
:false
,0
,null
,undefined
和空字符串,不会
答案 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
}
如果数据为?.
(undefined
或nullish
),则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)
在本质上,如果我们将代码编码为空,则可能意味着以下任何一种情况;
如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
}
答案 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)
检查字符串是否为 undefined
或 null
或 ""
的简单解决方案:-
const value = null;
if(!value) {
console.log('value is either null, undefined or empty string');
}