2017-01-04 2 views
0

Seit jQuery 3 .outerHeight() gibt undefined statt null zurück, wenn es auf einem nicht vorhandenen Element aufgerufen wird. Dies führt zu Problemen bei der Addition von Höhen von Elementen, die nicht existieren, weil number + undefined jetzt NaN ergibt. Während vor jQuery 3 number + null würde number zurückgeben.jQuery outerHeight() gibt undefined statt null zurück

var lorem = $('#div1').outerHeight() + $('#div2').outerHeight(); 

Returns NaN wenn zum Beispiel #div2 existiert nicht.

Mögliche Lösung:

undef2null = function(myvar) { 
    if (myvar === undefined) {return null;} 
    else {return myvar;} 
} 

oben Code wiederum würde in:

var lorem = undef2null($('#div1').outerHeight()) + undef2null($('#div2').outerHeight()); 

Gibt es eine elegantere Lösung als das?

+0

JavaScript nicht über Zahlen. –

+0

@ AluanHaddad LoL. Was? Okay, betrachte es als "Nummer". –

+1

@PraveenKumar, ich denke, Aluan wollte sagen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures, aber in diesem Fall ist es nicht so wichtig ... :) Oh, richtig Terminologiepolizei ... immer wach. :) – sinisake

Antwort

5

Sie gegen einen undefinierten oder Nullwert schützen können die || Operator:

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

... die weniger Typisierung ist als eine Funktion auf jedem der potentiell Problem Werte aufrufen (obwohl natürlich konnte man mache daraus eine einzeilige Funktion, wenn du willst).

oder anstelle einer Funktion, die einen einzelnen Wert überprüft, ob es undefined Sie eine Funktion schreiben konnte, die alle angegebenen Argumente addiert, die Überprüfung jeder:

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

(Hinweis dass der Code, den ich gezeigt habe, den Typ der gelieferten Werte nicht wirklich testet, also, wenn du ihn mit Strings oder was auch immer anrufst, würde er diese in das Ergebnis verketten. Du könntest einen zusätzlichen Test für nicht-numerisches/undefiniertes/Nullwerte, falls gewünscht.)

3

Es scheint seltsam, eine Methode zu schreiben, um undefined zu null zu machen, wenn Sie wirklich beide als null behandeln wollen.

sowohl undefined und null auf Null zu zwingen, können Sie

someValThatMightBeNullOrUndefined || 0 
+0

Beachten Sie, dass dies auch für' NaN' testet und daher zuverlässig ist. –