检查数组是否为空或不存在的最好方法是什么?
像这样吗?
if(array.length < 1 || array == undefined){ //empty }
你要先检查 "未定义"。如果你反过来做,如果数组未定义,就会产生一个错误。
if (array === undefined || array.length == 0) { // array empty or does not exist }
这个答案得到了相当多的关注,所以我想指出,我原来的答案,更多的是解决了问题中被评估的条件的错误顺序。在这个意义上,它未能解决几种情况,如空'值、其他类型的对象的长度'属性等。它也不是非常成文的JavaScript。
空'值、其他类型的对象的
万无一失的方法 从评论中得到一些启发,下面是我目前认为的检查一个数组是否为空或不存在的万无一失的方法。它还考虑到变量可能不是指一个数组,而是指其他一些具有length属性的对象。
length
if (!Array.isArray(array) || !array.length) { // array does not exist, is not an array, or is empty // ⇒ do not attempt to process array }
来分解一下。
1.Array.isArray(),不出所料,检查其参数是否是一个数组。这就排除了像 "null"、"undefined "和其他任何不是数组的值。 请注意,这也会剔除类似数组的对象,例如arguments对象和DOM NodeList对象。根据你的情况,这可能不是你想要的行为。
Array.isArray()
arguments
NodeList
2.2. array.length条件检查变量的length属性是否被评估为truthy值。因为前面的条件已经确定我们确实是在处理一个数组,所以这里不需要像array.length !=0或array.length !==0这样更严格的比较。
array.length
array.length !=0
array.length !==0
实用的方法 在很多情况下,上述方法可能看起来是多余的。也许你使用的是TypeScript这样的高阶语言,它在编译时为你做了大部分的类型检查,或者你真的不关心对象是否真的是一个数组,或者只是类似数组。
在这些情况下,我倾向于使用下面这种更习惯的JavaScript。
if (!array || !array.length) { // array or array.length are falsy // ⇒ do not attempt to process array }
或者,更经常的是,它的逆向。
if (array && array.length) { // array and array.length are truthy // ⇒ probably OK to process array }
你要先检查 "未定义"。如果你反过来做,如果数组未定义,就会产生一个错误。
Update
这个答案得到了相当多的关注,所以我想指出,我原来的答案,更多的是解决了问题中被评估的条件的错误顺序。在这个意义上,它未能解决几种情况,如
空'值、其他类型的对象的
长度'属性等。它也不是非常成文的JavaScript。万无一失的方法 从评论中得到一些启发,下面是我目前认为的检查一个数组是否为空或不存在的万无一失的方法。它还考虑到变量可能不是指一个数组,而是指其他一些具有
length
属性的对象。来分解一下。
1.
Array.isArray()
,不出所料,检查其参数是否是一个数组。这就排除了像 "null"、"undefined "和其他任何不是数组的值。请注意,这也会剔除类似数组的对象,例如
arguments
对象和DOMNodeList
对象。根据你的情况,这可能不是你想要的行为。2.2.
array.length
条件检查变量的length
属性是否被评估为truthy值。因为前面的条件已经确定我们确实是在处理一个数组,所以这里不需要像array.length !=0
或array.length !==0
这样更严格的比较。实用的方法 在很多情况下,上述方法可能看起来是多余的。也许你使用的是TypeScript这样的高阶语言,它在编译时为你做了大部分的类型检查,或者你真的不关心对象是否真的是一个数组,或者只是类似数组。
在这些情况下,我倾向于使用下面这种更习惯的JavaScript。
或者,更经常的是,它的逆向。