2016-07-23 3 views
1

Cast Ich möchte in der Lage sein, eine Variable auf den spezifischen Typ eines anderen zu werfen. Als Beispiel:Wie kann ich eine Variable auf den Typ eines anderen in Javascript

function convertToType(typevar, var) { 
    return (type typevar)var; // I know this doesn't work 
} 

so dass convertToType (1 "15") ergibt 15, convertToType ("1", 15) gibt "15", convertToType (false "True") liefert true zurück, usw.

Um es noch einmal zu wiederholen, ich möchte Variablen dynamisch auf die Typen anderer Variablen umwandeln können.

Ist das möglich?

+0

JavaScript dynamisch typisiert ist. es ist also keine Funktion zum Konvertieren erforderlich. –

Antwort

3

UPDATE: Hier ist ein noch vollständigeres Beispiel, mit Tests (erfordert Knoten 6+ oder etwas transpilation bis ES5): https://github.com/JaKXz/type-convert

können Sie den typeof Operator verwenden, um die richtige "Casting" Funktion zu erhalten:

function convertToTypeOf(typedVar, input) { 
    return { 
    'string': String.bind(null, input), 
    'number': Number.bind(null, input) 
    //etc 
    }[typeof typedVar](); 
} 

Probieren sie es hier aus: http://jsbin.com/kasomufucu/edit?js,console

ich würde vorschlagen, auch in TypeScript für Ihr Projekt suchen.

+0

Nein, 'typeof' sagt Ihnen, welche Art von Daten eine Variable enthält, sie konvertiert nicht zwischen Datentypen. – Quentin

+0

Haben Sie sich das jsbin @Quentin angesehen? – JaKXz

+0

Haben Sie Informationen, die für das Verständnis Ihrer Antwort wichtig sind, auf einer Website von Drittanbietern anstatt in der Antwort eingegeben? – Quentin

1
function convertToType (t, e) { 
    return (t.constructor) (e); 
} 

repl demo

Notiz den ersten Anruf, wenn wir konvertieren 15 in eine Zahl wollte, fügen wir einen Punkt (.) Mit dem ersten Parameter

+0

Das einzige Problem ist, dass convertToType (false, 'false') auch als wahr ausgewertet wird. Ich denke, der Boolsche Operator ist kaputt. Gibt es eine Möglichkeit, das zu beheben? –

+0

Um von einer Zeichenkette in einen booleschen Wert false zu konvertieren, müssen Sie eine leere Zeichenkette wie folgt übergeben: 'convertToType (false, '')' – marsouf

Verwandte Themen