Kar*_*arl 87 javascript tuples destructuring
在Python 2和Python 3等其他语言中,您可以为元组变量定义和赋值,并检索它们的值,如下所示:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Run Code Online (Sandbox Code Playgroud)
JavaScript中有类似的东西吗?或者我只需要用数组的丑陋方式来做:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来模拟JavaScript 5中的Python元组?
pc1*_*ter 102
Javascript 1.7添加了结构化赋值,它允许您基本上完成您所追求的目标.
function getTuple(){
return ["Bob", 24];
}
var [a, b] = getTuple();
// a === "bob" , b === 24 are both true
Run Code Online (Sandbox Code Playgroud)
Gab*_*aru 48
你必须以丑陋的方式去做.如果你真的想要这样的东西,你可以查看CoffeeScript,它有很多其他功能,使它看起来更像python(抱歉让它听起来像广告,但我真的很喜欢它.)
mon*_*amp 27
你可以做类似的事情:
var tuple = Object.freeze({ name:'Bob', age:14 })
Run Code Online (Sandbox Code Playgroud)
然后将名称和年龄称为属性
tuple.name
tuple.age
Run Code Online (Sandbox Code Playgroud)
Adr*_*ian 26
这个"元组"功能在EcmaScript2015中称为解构,很快就会得到最新浏览器的支持.目前,只有Firefox和Chrome支持它.
但是,嘿,你可以使用一个转换器.
代码看起来和python一样好:
let tuple = ["Bob", 24]
let [name, age] = tuple
console.log(name)
console.log(age)
Run Code Online (Sandbox Code Playgroud)
Mat*_*vis 10
冻结数组的行为与python元组相同:
const tuple = Object.freeze(["Bob", 24]);
let [name, age]; = tuple
console.debug(name); // "Bob"
console.debug(age); // 24
Run Code Online (Sandbox Code Playgroud)
看中并定义一个类
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
Run Code Online (Sandbox Code Playgroud)
今天可以在所有最新的浏览器中使用。
JavaScript不支持元组
如果您正在寻找不可变列表,可以使用Object.freeze()来使数组不可变.
Object.freeze()方法冻结一个对象:即阻止向其添加新属性; 防止删除现有属性; 并防止现有属性或其可枚举性,可配置性或可写性被更改.实质上,该对象实际上是不可变的.该方法返回被冻结的对象.
来源:Mozilla开发者网络 - Object.freeze()
像往常一样分配数组,但使用'Object.freeze()锁定它
> tuple = Object.freeze(['Bob', 24]);
[ 'Bob', 24 ]
Run Code Online (Sandbox Code Playgroud)
像使用常规数组一样使用值(不支持python多重赋值)
> name = tuple[0]
'Bob'
> age = tuple[1]
24
Run Code Online (Sandbox Code Playgroud)
尝试分配新值
> tuple[0] = 'Steve'
'Steve'
Run Code Online (Sandbox Code Playgroud)
但价值没有改变
> console.log(tuple)
[ 'Bob', 24 ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97294 次 |
| 最近记录: |