检查数组是否为空或不存在的最佳方法是什么?
像这样吗
if(array.length < 1 || array == undefined){ //empty }
您undefined要先进行检查。如果以相反的方式执行此操作,则在未定义数组的情况下将生成错误。
if (array === undefined || array.length == 0) { // array empty or does not exist }
更新资料
这个答案引起了相当多的关注,因此我想指出,我的原始答案比其他任何事情都更能解决问题中所评估条件的错误顺序。从这个意义上讲,它无法解决几种情况,例如null值,具有length属性的其他类型的对象等。它也不是非常惯用的JavaScript。
万无一失的方法 从注释中获得一些启发,以下是我目前认为是检查数组是否为空或不存在的万无一失的方法。它还考虑到变量可能不引用数组,而是引用其他具有length属性的对象。
if (!Array.isArray(array) || !array.length) { // array does not exist, is not an array, or is empty // ⇒ do not attempt to process array }
分解:
Array.isArray()毫不奇怪,它检查其参数是否为数组。这杂草淘汰的价值观一样null,undefined和其他任何不是数组。
请注意,这还将消除类似数组的对象,例如arguments对象和DOM NodeList对象。根据您的情况,这可能不是您要遵循的行为。
该array.length条件检查是否变量的length属性值将为一个truthy值。由于先前的条件已经确定我们确实在处理数组,因此此处不需要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 }
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。