Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以从一个数组中分配多个变量?_Javascript - Fatal编程技术网

Javascript 是否可以从一个数组中分配多个变量?

Javascript 是否可以从一个数组中分配多个变量?,javascript,Javascript,在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

在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中的自定义实现?

我认为它应该成为新规范的一部分,然后这也是一个很长的阅读过程p

key = "key:value".split(":")[0];
value = "key:value".split(":")[1];

我唯一可以考虑的选择。

我认为这不可能以跨浏览器的方式实现。据我所知,在某些情况下可能会有所帮助的最好方法是:

// we'll pretend you don't need the key.
var value = "key:value".split(":")[1];

我不知道您是如何使用它的,但如果我能够确定我自己的“key:value”字符串格式,我会尝试使用json将字符串求值为必要的对象:

var obj = eval("{'key':'key_str', 'value':'val_str'}");
alert(obj.key + "=" + ojb.value);  //alerts "key_str=value_str

如果你想知道接下来会发生什么,请阅读关于解构任务的部分

您可以使用的语言功能始终取决于您的环境

例如,为移动Safari(或其他浏览器(如Palm Pre、Android等)或AIR)开发web堆栈比为整个web开发(在web开发中,您甚至还需要考虑IE6)更容易预测



解决当前问题的跨浏览器解决方案是初始化一个数组,该数组包含要以window.variable格式填充的变量列表,然后循环执行。无法想象你为什么要这么做。似乎总会有更好的解决方案。

我刚才有一个完全相同的问题,作为我自己的练习,我得出了以下结论:

var key, value;

(function(arr){
  key=arr[0]; 
  value=arr[1];
})("key:value".split(":"));

alert(key + "=" + value);

看起来很难看,我宁愿使用temp-var(从技术上讲,我在这里使用的是一个temp变量)。

解构赋值在ECMAScript 2015(也称ES6)中是标准化的。但并不是所有的浏览器都已经实现了解构(截至2016年3月),即使实现了解构,用户也需要一段时间才能更新到支持解构的浏览器。请参阅规范中所有您可以做的很棒的事情。以下是一些:

// 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'
由于此功能破坏了向后兼容性,因此需要修改代码以使其在所有浏览器中都能工作。许多现有的Transpiler都支持分解结构。是一种很受欢迎的运输工具。看

更多信息:

使用,ES6的一项功能:
格雷格在他的问题中指出,这不是一个替代方案。使用临时变量是一个更好的选择!他指出,有可能使用一个临时变量来实现这一点,但是在这个方法中不需要临时变量?你认为这样更好吗?我同意临时变量是一个更好的选择,但问题是有一个替代方案,这是我唯一能想到的。在冒号上拆分安全吗?如果其中一个值中有冒号呢?嗨,不用担心冒号。这是一个随机的例子。我只是想知道是否可以从一个数组中分配多个变量。或者如果可能在不久的将来。对于这个令人困惑的问题,我很抱歉,但我特别想从一个数组中分配多个变量。split函数将返回一个数组。顺便说一句,评估是邪恶的;)啊,我明白了。split()只是为了解决这个问题,为您的示例获取一个数组。为什么eval是邪恶的?它是不安全的,但是javascript中的任何东西都不安全。这正是我要找的!我试着阅读EcmaScript规范,但那有点沉重。mozilla文档非常好!谢谢:)
var [x, y] = [1, 2];
console.log(x, y); // 1 2