它是从JavaScript中的数组分配多个变量的标准方法吗? 在Firefox和Opera中,你可以这样做:
var [key, value] = "key:value".split(":");
alert(key + "=" + value); // will alert "key = value";
但它在IE8或谷歌浏览器中不起作用。
有没有人知道在没有tmp变量的其他浏览器中执行此操作的好方法?
var tmp = "key:value".split(":");
var key=tmp[0], value=tmp[1];
这是即将推出的JavaScript版本,还是FF和Opera中的自定义实现?
答案 0 :(得分:19)
在ECMAScript 2015(a.k.a. ES6)中对解构分配进行了标准化。但并非所有浏览器都已实现解构(截至2016年3月),即使他们这样做,也需要一段时间才能将用户更新到支持的浏览器。请参阅规范中的examples,了解您可以执行的所有令人敬畏的事情。以下是一些:
// Assign from array elements
var [key, value] = "key:value".split(":");
// key => 'key'
// value => 'value'
// Assign from object properties
var {name: a, age: b} = {name: 'Peter', age: 5};
// a => 'Peter'
// b => 5
// Swap
[a, b] = [b, a]
// a => 5
// b => 'Peter'
由于此功能会破坏向后兼容性,因此您需要transpile代码才能使其在所有浏览器中都能正常运行。许多现有的转发器支持解构。 Babel是一个非常受欢迎的转录程序。请参阅Kangax´s table of browser and transpiler ES6-support。
更多信息:
答案 1 :(得分:8)
如果您想了解即将发生的事情,请阅读“解构分配”一节。
https://developer.mozilla.org/en/New_in_javascript_1.7
您可以使用的语言功能始终取决于您的环境。
开发移动Safari(或其他浏览器的Web堆栈,例如Palm Pre,Android等)或AIR,比开发网络更容易预测(在那里你甚至还需要IE6)考虑到了。)
解决手头问题的跨浏览器解决方案是初始化一个数组,该数组包含要填充window.variable格式的变量列表,然后循环执行。无法想象为什么你会这样做。似乎总会有更好的解决方案。
答案 2 :(得分:3)
我刚才有同样的问题,而且我自己的练习提出了以下内容:
var key, value;
(function(arr){
key=arr[0];
value=arr[1];
})("key:value".split(":"));
alert(key + "=" + value);
对我来说看起来很难看,我宁愿使用temp var(从技术上讲,我在这里使用临时变量)。
答案 3 :(得分:1)
我认为这不可能以跨浏览器的方式实现。我知道在一些情况下可能有用的最好的是:
// we'll pretend you don't need the key.
var value = "key:value".split(":")[1];
答案 4 :(得分:0)
我认为它应该是新规范的一部分,然后再次阅读......:p
key = "key:value".split(":")[0];
value = "key:value".split(":")[1];
只有我能想到的替代方案。
答案 5 :(得分:0)
我不知道你是如何使用它的,但是如果我能够确定我自己的“key:value”字符串的格式,我很想用json将字符串eval到必要的对象中:
var obj = eval("{'key':'key_str', 'value':'val_str'}");
alert(obj.key + "=" + ojb.value); //alerts "key_str=value_str
答案 6 :(得分:0)
var [x, y] = [1, 2];
console.log(x, y); // 1 2