vergleich von 0 mit false und ""
Alex
- javascript
hallo...
ich habe folgendes problem:
ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. 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??
gruss alex
ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. wenn ich verlgeiche
Eine ID die mit einer Zahl anfängt ist nicht erlaubt.
Struppi.
Eine ID die mit einer Zahl anfängt ist nicht erlaubt.
wie darf ich das verstehen? warum nicht? ich habe die id's für ne funktion zum aufklappen von bildern genommen machauf(0)...machauf(10)...wieso ist das da nicht erlaubt? null hat sich angeboten, weil ja ein arry auch bei null anfängt
Eine ID die mit einer Zahl anfängt ist nicht erlaubt.
wie darf ich das verstehen? warum nicht? ich habe die id's für ne funktion zum aufklappen von bildern genommen machauf(0)...machauf(10)...wieso ist das da nicht erlaubt? null hat sich angeboten, weil ja ein arry auch bei null anfängt
weil das so definiert ist. ID dürfen Zahlen und Buchstaben enthalten, daneben noch ein oder zwei Sonderzeichen, dürfen aber nicht mit einer Zahl anfangen.
Struppi.
Hmmm...
in klammern die zahl ist halt meine bildnummer, und wenn ich ne zahl >0 nehmen funktioniert das ja auch. müsste ich das da auch ändern?
hi,
in klammern die zahl ist halt meine bildnummer,
dann hast du dich falsch ausgedrückt, und struppi hat dich beim wort genommen.
eine ID ist in html etwas spezielles, nicht aber die "nummer" eines bildes.
und wenn ich ne zahl >0 nehmen funktioniert das ja auch.
wenn es "bei 0" nicht funktioniert, hast du wahrscheinlich einen - überraschung - fehler gemacht :-)
aber ohne deinen code zu sehen, kann da keiner was näheres zu sagen.
gruss,
wahsaga
hi,
in klammern die zahl ist halt meine bildnummer,
dann hast du dich falsch ausgedrückt, und struppi hat dich beim wort genommen.
eine ID ist in html etwas spezielles, nicht aber die "nummer" eines bildes.
Wenn es wirklich die id eines img Tags ist, dann ist eine Zahl als erstes Zeicen laut den Spezifkationen nicht erlaubt (ich find grad nicht die Quelle, weil ich mit den Dokumenten nicht so vertraut bin, vielleicht will jemand anderes)
und wenn ich ne zahl >0 nehmen funktioniert das ja auch.
wenn es "bei 0" nicht funktioniert, hast du wahrscheinlich einen - überraschung - fehler gemacht :-)
aber ohne deinen code zu sehen, kann da keiner was näheres zu sagen.
Naja, das Problem ist, das alert( "" == 0 ) bei mir zumindest auch, true ergibt.
Struppi.
Naja, das Problem ist, das alert( "" == 0 ) bei mir zumindest auch, true ergibt.
genau das is der springende punkt. daher habe ich mir auch nen beliebigen wert ausgedacht wie ich das vorbelege ("leer"). leider weis ich im moment auch keine andere alternative.
function init(){
for (i=0;i<=15;i++){
pruef[i]='leer';
}
function showpic(id){
if(pruef[id]==id) alert("Bild schon aufgedeckt!")
usw. ...
das sind die funktionen bzw. ausschnitte und wenn ich bei init() pruef[i]="" angebe hab ich das prob.
hi,
Wenn es wirklich die id eines img Tags ist, dann ist eine Zahl als erstes Zeicen laut den Spezifkationen nicht erlaubt
da wollte ich dir ja gar nicht wiedersprechen - nur m.e. hat alex mit ID eben _nicht_ die ID gemeint, sondern die laufende nummer der bilder beim zugriff über document.images[].
gruss,
wahsaga
Hi,
Abschnitte habe ich im beitrag zu struppi
Hallo Alex,
ich habe folgendes problem:
ein array belege ich mit allen werten mit "" vor oder mit false. dann habe ich verschieden id's unter anderem 0. 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??
In Programmiersprachen, die keine explizite Typdeklaration kennen, oder die Typen je nach Anforderung automatisch konvertieren, existiert zur Lösung solcher, eben dadurch auftretender, Probleme ein eigener Vergleichsoperator. In Javascript (und auch PHP, soweit ich weiß) ist das der Operator "===".
Der Ausdruck (arraywert === 0) ist _nur_ true, wenn arraywert einen numerischen Wert 0 enthält.
Vergleiche:
<script type="text/javascript">
<!--
var arr = new Array();
arr[0] = 1;
arr[1] = 0;
arr[2] = 2;
arr[3] = null;
arr[4] = false;
arr[5] = "";
for ( var i = 0; i<arr.length; i++) {
alert("arr[i] ist: " +arr[i] + "\n" + "arr[i] == 0 ergibt: " + (arr[i] == 0) + "\n" + "arr[i] === 0 ergibt: " + (arr[i] === 0));
}
//-->
</script>
viele Grüße
Axel
PS: Bei ID-Attributen in HTML-Elementen hat Struppi natürlich recht.
http://www.w3.org/TR/html4/types.html#h-6.2
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
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:)