peterS.: vergleich von 0 mit false und "" (type detection)

Beitrag lesen

gruss alex,

... wenn ich verlgeiche if (arraywert == 0) trifft das
ja immer zu. was kann ich als wertvorbelegung nehmen
ausser false oder ""(leer), damit dieser vergleich
wirklich nur zutrifft wenn das arrayelement auch 0 ist
und nicht false oder leer??

der einfache vergleichsoperator oder auch gleichheits-
   operator "==" nimmt eine typenkonvertierung auf der
   rechten operandenseite vor, wenn der gesamte ausdruck
   nicht sofort mit [true] validiert - deshalb sind folgende
   terme immer wahr: (0 == ""), (true == 1), (-1 == "-1"), ...

der identitaets-operator "===" verlangt hingegen von
   beiden operanden gleiche typen und gleiche werte - die
   gerade angefuehrten beispiele saehen dann so aus:
   (0 === ""), (true === 1), (-1 === "-1"), - deren
   auswertung ergaebe [false];

benutze in solchen faellen also immer den identitaets-
   operator;

FYI - folgende in javascript nicht vorhandenen globalen
   funktionen koennen von den gerade gemachten ausfuehrungen
   abgeleitet werden:

this.isUndefined = function(obj) {
     return (typeof(obj) == "undefined");
   };
   this.isNull = function(obj) {
     return ((typeof(obj) == "object") && (obj === null));
   };

this.isNative = function(obj) { // returns true for every ECMA-object that is this global functions argument;
     return (!isUndefined(obj) && !isNull(obj) && (typeof(obj.constructor) == "function"));
   };

this.isBoolean = function(obj) {
     return (isNative(obj) && (obj.constructor == Boolean));
   };
   this.isNumber = function(obj) {
     return (isNative(obj) && (obj.constructor == Number) && isFinite(obj));
   };
   this.isString = function(obj) {
     return (isNative(obj) && (obj.constructor == String));
   };

viel erfolg und by(t)e by(t)e - peterS. - pseliger@gmx.net

--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)