如何检查JavaScript数组值是空还是空?
这将testing是否存在位置“索引”的值是否存在,或者是否有更好的方法:
if(arrayName[index]==""){ // do stuff }
JavaScript中的所有数组都包含array.length
元素,从array[0]
开始直到array[array.length - 1]
。 根据定义,如果i
介于0
和array.length - 1
之间,则索引为i
的数组元素被认为是数组的一部分。
也就是说,JavaScript数组是线性的,从零开始并达到最大值,而数组没有从数组中排除特定值或范围的机制。 要找出一个值是否存在于一个给定的位置索引(其中索引是0或正整数),你可以直接使用
if (index < array.length) { // do stuff }
但是,某些数组的值可能为null, undefined
, NaN
, Infinity
,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
的值。
这就是稀疏数组所发生的情况:不是所有0
和array.length-1
之间的索引都存在。
所以你可以检查array[index] === undefined
。
但是,财产index
可能存在一个undefined
值。 如果你想过滤出这种情况,你可以使用in
运算符或hasOwnProperty
,如我如何检查一个对象是否在JavaScript中有一个属性中所描述的?
index in array; array.hasOwnProperty(index);
如果您想要将undefined
或null
值的现有属性视为不存在,则可以使用松散比较array[index] == undefined
或array[index] == null
。
如果你知道数组不稀疏,你可以比较index
与array.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>