如果在不存在的元素上调用jQuery 3 .outerHeight()
,则返回undefined
而不是null
。这会在添加不存在的元素的高度时导致问题,因为number
+ undefined
现在会导致NaN
。在jQuery之前,number
+ null
会返回number
。
var lorem = $('#div1').outerHeight() + $('#div2').outerHeight();
如果例如NaN
不存在,则返回#div2
。
潜在的解决方案:
undef2null = function(myvar) {
if (myvar === undefined) {return null;}
else {return myvar;}
}
将以上代码转换为:
var lorem = undef2null($('#div1').outerHeight()) + undef2null($('#div2').outerHeight());
有比这更优雅的解决方案吗?
答案 0 :(得分:6)
您可以使用||
运算符防范未定义的或 null值:
($('#div1').outerHeight() || 0)
...这比在每个潜在问题值上调用一个函数更少打字(尽管显然你可以根据需要制作单行函数)。
或者代替检查单个值以查看它是否为undefined
的函数,您可以编写一个函数来添加所有提供的参数,检查每个:
function addNumbers() {
var result = 0;
for (var i = 0; i < arguments.length; i++)
result += arguments[i] || 0;
return result;
}
console.log( addNumbers(1,2,3) );
console.log( addNumbers(1,undefined,3) );
console.log( addNumbers(1,undefined,null) );
(请注意,我所显示的代码实际上并没有测试所提供值的类型,因此如果您使用字符串或其他任何内容将其调用到结果中,那么您可以为非符号添加额外的测试。如果需要,可以使用-numeric / undefined / null值。)
答案 1 :(得分:3)
当你真的想要将两者都视为零时,写一个方法将undefined
变为null
似乎很奇怪。
要将undefined
和null
强制为零,您可以
someValThatMightBeNullOrUndefined || 0