这将用于测试一个值在位置索引是否存在,或者有更好的方法:

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

当前回答

使用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)是验证它是否不是一个空数组,这样其他的东西,如forEach可以继续。

其他回答

我建议创建一个这样的函数:

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

你可以这样称呼它:

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

强制开发人员使用isemptyl接口将捕获输入错误,例如未定义的arrayName或indexVal变量。

(在使用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也有类似的结果。

如果数组或索引值不存在,就会得到一个错误。

对于有效的输入,如果arrayName[indexVal]是以下任意一个,你只会得到一个true:

零 未定义的 南 空字符串 0 假

这取决于你对“空”的定义。

当您试图获取一个对象的属性值时,该对象没有该名称的属性,您将获得该值为undefined。

这就是稀疏数组的情况:不是所有的索引都在0和数组之间。长度为1的存在。

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

但是,属性索引可能存在一个未定义的值。如果你想过滤掉这种情况,你可以使用in操作符或hasOwnProperty,如如何检查一个对象在JavaScript中是否有属性所述?

index in array;
array.hasOwnProperty(index);

如果你想要考虑一个具有未定义或空值的现有属性不存在,你可以使用松散比较数组[index] == undefined或数组[index] == null。

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

我认为这个决定适合那些喜欢声明式函数编程而不是命令式OOP或过程式编程的人。如果你的问题是“里面有价值吗?”(一个真实或虚假的值)”你可以使用。some方法来验证里面的值。

[].some(el => el || !el);

它并不完美,但它不需要应用任何包含相同逻辑的额外函数,如function isEmpty(arr){…}。 当我们这样做[]时,它听起来仍然比“它是零长度吗?”要好。长度导致0,在某些情况下是危险的。 甚至是这个[]。length > 0表示它的长度是否大于0 ?

先进的例子:

[    ].some(el => el || !el); // false
[null].some(el => el || !el); // true
[1, 3].some(el => el || !el); // true

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

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

也适用于关联数组和删除某些索引的数组

要检查它是否从未被定义,was deleted OR是一个空值或逻辑空值(NaN,空字符串,false):

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

短而通用的方法

如果你想检查任何数组是否有假值(如false, undefined, null或空字符串),你可以像这样使用every()方法:

array.every(function(element) {return !!element;}); // returns true or false

例如:

['23', null, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false

['23', '', 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false

['23', true, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns true

如果你需要得到一个假值的第一个索引,你可以这样做:

let falsyIndex; 

if(!['23', true, 2, null, {key: 'value'}].every(function(element, index) {falsyIndex = index; return !!element;})) {
  console.log(falsyIndex);
} // logs 3

如果你只需要检查一个给定索引的数组的假值,你可以这样做:

if (!!array[index]) {
  // array[index] is a correct value
}
else {
  // array[index] is a falsy value
}