2017-01-04 31 views
0

jQuery 3 .outerHeight()は、存在しない要素に対して呼び出された場合、nullの代わりにundefinedを返します。 number + undefinedの結果がNaNになるため、存在しない要素の高さを加算すると問題が発生します。 jQuery 3より前にはnumber + nullが返されます。numberです。jQuery outerHeight()はNULLの代わりに未定義を返します。

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

JavaScriptが整数を持っていないことができます。 –

+0

@AluanHaddad LoL。何?さて、それを '数字 'と考えてください。 –

+1

@PraveenKumar、Aluanはhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structuresと言っていたと思いますが、この場合はそれほど重要ではありません。:) Oh、right専門用語警察...常に起きている。 :) – sinisake

答えて

5

あなたは||演算子使用して未定義または NULL値を防ぐことができます明らかにあなたはできるものの(

($('#div1').outerHeight() || 0) 

...潜在的に問題のある値のそれぞれに関数を呼び出すよりも少ないタイピングでありますあなたが望むなら、それから1行の機能を作りなさい)。

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));

(注:またはその代わりに、それはあなたがそれぞれをチェックし、すべての指定された引数を加算する機能を書くことができundefinedであるかどうかを確認するために単一の値をチェックする機能の

私が示したコードは実際には供給された値の型をテストしていないので、文字列などで呼び出した場合、結果を幸せに連結することになります。数値以外の/未定義/必要に応じてヌル値)

3

本当に両方をゼロとして扱いたい場合は、undefinednullにする方法を書いてください。

がゼロに undefinednullの両方を強制するには、

someValThatMightBeNullOrUndefined || 0 
+0

これは' NaN'についてもテストされており、信頼できることに注意してください。 –

関連する問題