可以在此处删除空值检查吗
Can a check for null be removed here?
这将为可迭代对象提供更强的检查,并减少控制结构。
我采用了下面的代码并对其进行了修改,以消除对null的初始检查。通过用键显式检查某个东西,我们可以提供一个似乎更有力的保证,即某个东西不会溜走(obj==null),并且我们可以消除4个控制语句中的1个。更新在代码段2中。
此外,通过添加对&& obj
的检查,我们可以避免抛出错误,这似乎是最初检查的目的。
CCD_ 2将检测CCD_ 3和CCD_。
来自Undercore:
Snippet1
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
新的片段。直接在注释后面的行已被修改。
代码段2a
var each = _.each = _.forEach = function(obj, iterator, context) {
// modify - obj &&
if (nativeForEach && obj && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
// modify - obj &&
} else if (obj && (obj.length === +obj.length)) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
如果3种情况中的0种匹配,则默认情况下(即隐式),它将失败并为return undefined
。
此删除操作是否正确?
根据讨论:
代码段2b
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj && (obj.length === +obj.length)) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
我们可以消除的4个控制语句中的1个
…但您必须在其他检查中添加obj &&
检查,甚至必须在对象循环周围引入另一个if条件。通过这种"改进",代码变得更加复杂和缓慢。
此删除操作是否正确?
好吧,你已经改变了控制流程。如果传入数组或其他对象,行为不会发生变化,但新的代码片段不会枚举布尔值和数字(如这里所示),也不会尝试迭代空字符串。不确定你认为什么是"正确的"。
相关文章:
- 检查 javascript 数组是否不仅包含空值
- 如何使用jQuery检查两个复选框何时都有非空值
- Json - 检查子节点空值
- 我应该使用 if-then-else 或 and or 运算符来检查 Javascript 中的空值吗?
- JavaScript 的类型函数是否检查空值
- 可以在此处删除空值检查吗
- 如何检查文件.getElementbyId包含空值或未定义值
- HTML-如何在javascript中对文本区域的空值输入进行错误检查
- 检查数组的空值或未定义值
- 检查多个空值的最佳方法是什么?例如if(foo.bar.giz.mo.)X === 123)
- 如何检查json中的空值
- 如何在Java脚本中做空值检查
- 如果值为空,检查输入是否出现
- 如何在Javascript中检查空值
- 如何使用空值检查日期的截止日期
- 检查对象内部的空值
- 使用时刻.js检查时差,但返回 true 并返回空值
- 检查ngFor循环中的空值
- 检查对象数组中是否存在空值
- web应用程序-检查JavaScript空值