1

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

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

5 回答 5

2

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

if (Array.isArray(response.errors) && response.errors.length) {
    deferred.reject(response);
} else {
    deferred.resolve(response);
}
于 2013-10-02T18:43:09.467 回答
1

一种方法是:

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

0这是使用在 JavaScript 中被认为是虚假的事实,而任何其他数字都被认为是真实的。

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

if (response.errors instanceof Array && response.errors.length) {
于 2013-10-02T18:39:32.237 回答
0

长度检查 ( length > x)不会抛出异常。可能引发异常的是如果或response评估errors为未定义(例如不存在)。

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 中的非 0 数字是一个真值,它允许if (length > 0) ..写成,if (length) ..并且它可以可靠地工作,假设长度始终是一个数字,当存在时。

于 2013-10-02T18:41:48.557 回答
0

关于什么

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

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

于 2013-10-02T18:41:52.973 回答
0

如果您想明确检查它是否是一个数组。

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

(在 FF 和 Chrome 中测试)。

于 2013-10-02T18:50:50.257 回答