Es scheint, dass wenn ich einen numerischen Typ als Schlüsselnamen in einem Objekt verwende, dieser immer in eine Zeichenfolge konvertiert wird. Gibt es überhaupt eine Möglichkeit, es tatsächlich als Zahl zu speichern? Das normale Typecasting scheint nicht zu funktionieren.
Beispiel:
var userId = 1;
console.log( typeof userId ); // number
myObject[userId] = 'a value';
console.dir(myObject);
Dir Output:
{
'1': 'a value'
}
Was ich will ist folgendes:
{
1: 'a value'
}
Rat?
Antworten:
Nein das ist nicht möglich. Der Schlüssel wird immer in eine Zeichenfolge konvertiert. Siehe Property Accessor-Dokumente
quelle
length
.myArray["1"] = foo
, erscheint eine Eigenschaft zu Einstellung, während es tatsächlich ein Array - Element enthält, aber nur , weil „1“ ist eine String - Darstellung einer ganzen Zahl, die eine vollständige linguistische nonsense ist - aber das ist Javascript.myArray["1"] = foo
nicht nur erscheint eine Eigenschaft zu Einstellung, ist es in der Tat eine Eigenschaft festlegen (mit der Taste „1“) in jedem Sinne des Wortes von Eigentum. ZBmyArray.hasOwnProperty("1")
ergibttrue
. Semantisch kann diese Eigenschaft aufgrund eines numerischen Schlüssels auch als "Element" betrachtet werden, aber es gibt nichts weiter, was ein Array "Element" von einer Array-Eigenschaft unterscheidet. Lesen Sie die Spezifikation. Wenn Sie immer noch nicht einverstanden sind, geben Sie bitte Ihre Quelle an.In einem Objekt, nein, aber ich habe Map als äußerst nützlich für diese Anwendung empfunden. Hier habe ich es für numerische Schlüssel verwendet, ein schlüsselbasiertes Ereignis.
quelle
Scheint in ECMA-262-5 beabsichtigt zu sein:
In ECMA-262-3 sehe ich jedoch keine definitive Spezifikation dafür. Unabhängig davon würde ich nicht versuchen, Nicht-Strings als Eigenschaftsnamen zu verwenden.
quelle
Brauchen wir so etwas?
Konsole: Objekt
1: "ein Wert"
quelle
Ich denke, Sie können Folgendes tun, wenn Sie das oben genannte Ding für den Zugriff wie eine Nummer verwenden möchten. Ich habe das Gleiche getan und gearbeitet.
Dies funktioniert nur, wenn der Schlüssel nicht mit einem numerischen Zeichen beginnt, da er sonst in eine Zahl umgewandelt wird. Siehe folgendes Beispiel:
Ich habe hier jQuery verwendet
Aktualisiert:
Es kann das obige Problem überwinden. Bitte schlagen Sie besser vor, falls verfügbar, und geben Sie ein Problem mit dieser Antwort an, falls vorhanden.
quelle
In JavaScript sind numerische Zeichenfolgen und Zahlen also austauschbar
Wenn Sie wirklich möchten, dass die Zahl der Schlüssel für ein Objekt ist, möchten Sie möglicherweise ein Array (dh mit
new Array()
oder erstellt[]
).quelle
Object.prototype.toString.call(someObject)
Das Problem ist, dass Sie keine Zahlen als Schlüssel verwenden können.