繁体   English   中英

尝试/检查Javascript中数组长度的更好方法?

[英]A Better Way to Try / Check array length in Javascript?

尝试检查响应是否为长度数组的更好方法是什么?

try{
    response.errors.length > 0;
    deferred.reject(response)
}
catch(e){
    deferred.resolve(response);
}

一种方法是:

if (response.errors.length) {
    deferred.reject(response);
} else {
    deferred.resolve(response);
}

这是因为在JavaScript中0被认为是错误的,而其他任何数字都被认为是错误的。

如果您担心response.errors的类型,可以将response.errors instanceof Array添加到if条件:

if (response.errors instanceof Array && response.errors.length) {

这将确保错误是一个数组,并且其中包含项。

if (Array.isArray(response.errors) && response.errors.length) {
    deferred.reject(response);
} else {
    deferred.resolve(response);
}

长度检查( length > x不会引发异常。 如果responseerrors评估为未定义(例如,不存在),则可能引发异常。

if (response && response.errors && response.errors.length) {
  // Have errors
  // The check for response might not be needed, but one should most
  // definitely ensure that `response.errors` evaluates to an object (Array?)
  // before trying to access a property upon it.
}

请注意,这会使用&& 短路行为。

另外,有时对数据进行规范化也很好(假设response始终是一个对象)。 在这种情况下,请确保根据需要有一个“空数组”,以便我们有一些数组可以检查长度。

response.errors = response.errors || []
if (response.errors.length) {
   // Have errors
}

在上面的示例中,我还利用JavaScript中的非零数字是true-y值,该值允许if (length > 0) ..被写为if (length) ..并且假定该length可以可靠地工作存在时始终为数字。

关于什么

if (response.errors && response.errors.length > 0)
   deferred.reject(response);
else
    deferred.resolve(response);

无需从访问不存在的属性中捕获异常,只需在…之前测试它们的存在...

如果您想明确地检查它是否为数组。

if (response.errors && (response.errors instanceof Array) && response.errors.length > 0)
   deferred.reject(response);
else
   deferred.resolve(response);

(在FF和Chrome中测试)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM