tupler - Är det möjligt i JavaScript att samtidigt tilldela flera variabler som det är i Python?
I vissa språk, som Python, kan du definiera och tilldela värden till en tuppel av variabler och hämta deras värden på detta sätt:
name, age = ("Bob", 24)
print(name) # name evaluates to "Bob"
print(age) # age evaluates to 24
Finns det något liknande i JavaScript? Eller måste jag bara göra det på det fula sättet med en array:
tuple = ["Bob", 24];
name = tuple[0]; // name Evaluates to Bob
age = tuple[1]; // age Evaluates to 24
Finns det ett bättre sätt att simulera Python-tupler i JavaScript?
Svar #1
JavaScript 1.7 lade till syntax för destruktureringsuppdrag som låter dig göra i princip det du är ute efter:
function getTuple(){
return ["Bob", 24];
}
var [a, b] = getTuple();
// a === "bob" , b === 24 are both true
Svar #2
Du måste göra det på det fula sättet. Om du verkligen vill ha något liknande detta kan du kolla in CoffeeScript, som har det och en hel del andra funktioner som gör att det ser mer ut som Python (förlåt för att det låter som en reklam, men jag gillar det verkligen).
Svar #3
Du kan göra något liknande:
var tuple = Object.freeze({ name:'Bob', age:14 })
och hänvisa sedan till namn och ålder som attribut
tuple.name
tuple.age
Svar #4
Denna "tuple"-funktion kallas destrukturering i EcmaScript2015 och kommer snart att stödjas av uppdaterade webbläsare. För närvarande stöds den endast av Firefox och Chrome.
Men hej, du kan använda en transpiler.
Koden skulle se lika snygg ut som Python:
let tuple = ["Bob", 24]
let [name, age] = tuple
console.log(name)
console.log(age)
Svar #5
En frusen lista beter sig identiskt med en python-tuple:
const tuple = Object.freeze(["Bob", 24]);
let [name, age]; = tuple
console.debug(name); // "Bob"
console.debug(age); // 24
Var elegant och definiera en klass
class Tuple extends Array {
constructor(...items) {
super(...items);
Object.freeze(this);
}
}
let tuple = new Tuple("Jim", 35);
let [name, age] = tuple;
console.debug(name); // Jim
console.debug(age); // 35
tuple = ["Bob", 24]; // no effect
console.debug(name); // Jim
console.debug(age); // 25
Fungerar idag i alla de senaste webbläsarna.
