jQuery outerHeight()返回undefined而不是null

时间:2017-01-04 00:06:21

标签: javascript jquery

如果在不存在的元素上调用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());

有比这更优雅的解决方案吗?

2 个答案:

答案 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似乎很奇怪。

要将undefinednull强制为零,您可以

someValThatMightBeNullOrUndefined || 0