如何检查JavaScript数组值是空还是空?

这将testing是否存在位置“索引”的值是否存在,或者是否有更好的方法:

if(arrayName[index]==""){ // do stuff } 

JavaScript中的所有数组都包含array.length元素,从array[0]开始直到array[array.length - 1] 。 根据定义,如果i介于0array.length - 1之间,则索引为i的数组元素被认为是数组的一部分。

也就是说,JavaScript数组是线性的,从零开始并达到最大值,而数组没有从数组中排除特定值或范围的机制。 要找出一个值是否存在于一个给定的位置索引(其中索引是0或正整数),你可以直接使用

 if (index < array.length) { // do stuff } 

但是,某些数组的值可能为null, undefinedNaNInfinity ,0或一组不同的值。 例如,如果通过增加array.length属性来添加数组值,则任何新值都将是undefined

确定一个给定的值是有意义的还是已经定义的。 也就是说, 不是 undefined ,或者是null

 if (typeof array[index] !== 'undefined') { 

要么

 if (typeof array[index] !== 'undefined' && array[index] !== null) { 

有趣的是,由于JavaScript的比较规则,我最后一个例子可以优化到:

 if (array[index] != null) { // The == and != operator consider null equal to only null or undefined 

我们不能这样做:

 if(arrayName.length > 0){ //or **if(arrayName.length)** //this array is not empty }else{ //this array is empty } 

仅使用.length是不安全的,会在某些浏览器中导致错误。 这是一个更好的解决scheme:

 if(array && array.length){ // not empty } else { // empty } 

或者,我们可以使用:

 Objects.keys(__array__).length 
 if(!arrayName[index]){ // do stuff } 
 if(arrayName.length > index && arrayName[index] !== null) { //arrayName[index] has a value } 
 if(typeof arr ==='object' && arr instanceof Array ){ if(!arr.length){ println 'empty' }else{ printn 'not Empty' } }else{ println 'Null' } 

如果你的意思是'Null' – >它的元素为null或者等于'',在这种情况下:在过滤所有'null'元素之后检查数组是否为空

 if(!arr.clean().length){return 'is null'} 

当然,之前添加清理方法:

 Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !=='undefined')&&(e!= null)&&(e!='')})} 

我会build议创build一个这样的function:

 function isEmptyEl(array, i) { return !(array[i]); } 

你可以这样称呼它:

 if (isEmptyEl(arrayName, indexVal)) { console.log('arrayName[' + indexVal + '] is empty'); } 

强制开发人员坚持isEmptyEl接口将捕获input错误,如未定义的arrayName或indexValvariables。

(在Javascript中进行编程时,防守编程通常是很好的做法。)

如果arrayName没有定义,你会得到这样的错误:

 Uncaught ReferenceError: arrayName is not defined at <anonymous>:2:15 at Object.InjectedScript._evaluateOn (<anonymous>:895:140) at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34) at Object.InjectedScript.evaluate (<anonymous>:694:21) 

类似的结果为未定义的indexVal。

如果数组或索引值不存在,则会出现错误。

对于有效的input,如果arrayName [indexVal]是以下任何一项,则只会得到一个true:

  • 空值
  • 未定义
  • 为NaN
  • 空的string
  • 0

这取决于你的意思是“空”。

当你试图获得一个没有属性的对象的属性值时,你会得到undefined的值。

这就是稀疏数组所发生的情况:不是所有0array.length-1之间的索引都存在。

所以你可以检查array[index] === undefined

但是,财产index可能存在一个undefined值。 如果你想过滤出这种情况,你可以使用in运算符或hasOwnProperty ,如我如何检查一个对象是否在JavaScript中有一个属性中所描述的?

 index in array; array.hasOwnProperty(index); 

如果您想要将undefinednull值的现有属性视为不存在,则可以使用松散比较array[index] == undefinedarray[index] == null

如果你知道数组不稀疏,你可以比较indexarray.length 。 但为了安全起见,您可能需要确保index真的是数组索引,请参阅检查属性名称是否为数组索引

尝试这个如果数组[索引]为空

 if (array[index] != null) 

用Lodash,你可以做:

 if(_.has(req,'documents')){ if (req.documents.length) _.forEach(req.documents, function(document){ records.push(document); }); } else { } 

if(_.has(req,'documents'))是检查我们的请求对象是否有一个名为documents的属性,并且它有那个prop,则下一个if (req.documents.length)是validation它是否不是空数组,所以其他东西像forEach可以继续。

要检查它是否从未被定义或者是否被删除:

 if(typeof arrayName[index]==="undefined"){ //the index is not in the array } 

也可以用于删除索引的关联数组和数组

检查它是否从未被定义,被删除OR是一个空或逻辑空值(NaN,空string,假):

 if(typeof arrayName[index]==="undefined"||arrayName[index]){ //the index is not defined or the value an empty value } 

我遇到了这个问题使用laravel数据表。 我在活动日志中存储了一个名为properties的JSON值,并希望显示一个基于这个值的button是否为空。

那么,datatables解释这是一个数组,如果它是空的,一个对象,如果它不是,因此,下面的解决scheme为我工作:

 render: function (data, type, full) { if (full.properties.length !== 0) { // do stuff } } 

一个对象没有长度属性。

您可以使用Loadsh库更有效地执行此操作,例如:

如果你有一个名为“pets”的数组,例如:

 var pets = ['dog', undefined, 'cat', null]; console.log(_.isEmpty(pets[1])); // true console.log(_.isEmpty(pets[3])); // true console.log(_.isEmpty(pets[4])); // false _.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) }); 

要检查所有数组值为空或未定义的值:

 var pets = ['dog', undefined, 'cat', null]; console.log(_.isEmpty(pets[1])); // true console.log(_.isEmpty(pets[3])); // true console.log(_.isEmpty(pets[4])); // false _.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) }); 
 <script src="ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>