尝试检查响应是否为具有长度的数组的更好方法是什么?
try{
response.errors.length > 0;
deferred.reject(response)
}
catch(e){
deferred.resolve(response);
}
尝试检查响应是否为具有长度的数组的更好方法是什么?
try{
response.errors.length > 0;
deferred.reject(response)
}
catch(e){
deferred.resolve(response);
}
这将确保错误是一个数组并且其中包含项目。
if (Array.isArray(response.errors) && response.errors.length) {
deferred.reject(response);
} else {
deferred.resolve(response);
}
一种方法是:
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) {
长度检查 ( 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) ..
并且它可以可靠地工作,假设长度始终是一个数字,当存在时。
关于什么
if (response.errors && response.errors.length > 0)
deferred.reject(response);
else
deferred.resolve(response);
无需从访问不存在的属性中捕获异常,只需在之前测试它们的存在......</p>
如果您想明确检查它是否是一个数组。
if (response.errors && (response.errors instanceof Array) && response.errors.length > 0)
deferred.reject(response);
else
deferred.resolve(response);
(在 FF 和 Chrome 中测试)。