这个代码可以用来测试位置为index
的值是否存在,或者有更好的方法吗:
if(arrayName[index]==""){
// do stuff
}
这个代码可以用来测试位置为index
的值是否存在,或者有更好的方法吗:
if(arrayName[index]==""){
// do stuff
}
array.length
个元素,从 array[0]
到 array[array.length - 1]
。 如果索引 i
的数组元素在 0
到 array.length - 1
(包括两端)范围内,则定义为该数组的一部分。 如果不在此范围内,则不属于该数组。if (i >= 0 && i < array.length) {
// it is in array
}
实际上,JavaScript 引擎在底层分配数组空间时几乎肯定不会像这样线性且连续地分配,因为这对于动态语言来说没有多大意义,并且对于某些代码来说效率低下。它们可能是哈希表或一些混合策略,而数组的未定义范围可能并未分配自己的内存。尽管如此,JavaScript 语言希望以 array.length
的长度呈现数组的 n 成员,并将它们命名为从 0 到 n-1,并且这个范围内的所有内容都是数组的一部分。
然而,你可能想知道的是数组中的值是否实际上是已定义的,也就是说,它不是 undefined
。也许你甚至想知道它是否被定义并且不是null
。可以向数组添加成员而不必设置它们的值:例如,如果通过增加 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 != operators consider null equal to only null or undefined
}
length
属性,在这种情况下,后两个示例更加合适。 - Justin Johnsonfoo != null
来替换foo !== 'undefined' && foo !== null
,意思不变且更通俗易懂。 - thinklinux0
到array.length-1
的所有元素。但并非所有这些值都是已定义的值。如果您在数组成员上使用delete关键字,则会将该成员设置回未定义状态,就像通过递增其array.length参数来扩展数组一样,新值将以未定义状态开始。实际上,Javascript实现可能会优化数组存储,并且某些或所有未定义值可能不占用任何内存。 - thomasrutternew Array(1)[0] === undefined
但值为空。 [undefined][0] === undefined
但是值被设置了;数组有一个值。唯一完美的答案是使用in
或hasOwnProperty()
-- idx in array
或array.hasOwnProperty(idx)
--根据此答案:https://dev59.com/M3E85IYBdhLWcg3wqVX5#39171620 - dx_over_dt我们不能只是这样做吗:
if(arrayName.length > 0){
//or **if(arrayName.length)**
//this array is not empty
}else{
//this array is empty
}
if(arrayName.length) {...
会产生什么不同的结果? - siannoneif(arrayName.length) {...}
在 null
上会失败。 - Ronnie Royston[undefined, undefined]
,这是一个长度为2的数组。 - Soldeplata Saketos仅使用.length
不安全,可能会在某些浏览器中导致错误。这里是更好的解决方案:
if(array && array.length){
// not empty
} else {
// empty
}
或者,我们可以使用:
Object.keys(__array__).length
if(!arrayName[index]){
// do stuff
}
if(arrayName.length > index && arrayName[index] !== null) {
//arrayName[index] has a value
}
x == null
只对 null 或 undefined 为真,其他情况都为假。同样,x != null
则对非 null 和 undefined 的任何内容都为真。除非你特别需要查找 undefined,否则就要利用隐式转换的好处。 - Marcus Stadex == null
只会匹配 null 或 undefined。我会编辑我的回答,谢谢。 - thomasrutter简单通用的方法
如果您想检查任何数组是否具有虚假值(如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
}
if(typeof arr ==='object' && arr instanceof Array ){
if(!arr.length){
println 'empty'
}else{
printn 'not Empty'
}
}else{
println 'Null'
}
if(!arr.clean().length){return 'is null'}
Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !=='undefined')&&(e!= null)&&(e!='')})}
这取决于你对“empty”的理解。
当您尝试获取对象上没有该名称的属性的值时,您将获得值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
确实是数组索引,请参见检查属性名称是否为数组索引。I would recommend creating a function like this:
function isEmptyEl(array, i) {
return !(array[i]);
}
if (isEmptyEl(arrayName, indexVal)) {
console.log('arrayName[' + indexVal + '] is empty');
}
强制开发人员遵守isEmptyEl接口可以捕获输入错误,例如未定义的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:
let arr = [0, 1, 2, 3, 4, 5]
delete arr[3]
console.log(arr) // [0, 1, 2, empty, 4, 5]
console.log(arr[3]) // undefined
自然的检查方法是查看数组成员是否未定义,我不确定是否存在其他方法。
if (arr[index] === undefined) {
// member does not exist
}