2012-03-24 100 views
5

在一些项目中,我的工作中,加入一些块用这样的语法:JavaScript的替代品

var [code, name] = input.split("/"); 
console.log(code); 
console.log(name); 

我真的很喜欢这个,就是这么简单和小。这是真的,我可以做到这一点使用其他语法,如:

var code_name = input.split("/"); 
console.log(code_name[0]); 
console.log(code_name[1]); 

但是,像谷歌Chrome和Opera一些浏览器不支持此“功能”。有人知道这是JS的未来功能还是被弃用?在不赞成的情况下,存在一些替代第一种情况的替代方案?

谢谢大家。

+2

看到这个答案:http://stackoverflow.com/a/3422473/218196 – 2012-03-24 14:47:39

回答

2

一个临时它并不像虽然你提出的代码很好,但我认为它看起来不错,不过,你必须做一些解决方法:

所有的

首先,想法是使清洁语法调用此函数,例如:

[5,4,3,2,1].list(a,b,c,d,e); 

的想法是,A,B,C,d,e由参考修改。

由于变量作为值传递,只有对象按引用传递,变量a,b,c,d,e必须是对象。

var a=Object(),b=Object(),c=Object(),d=Object(),e=Object(); 

一旦它们是对象,你可以参照修改自己的价值(这里http://sirdarckcat.blogspot.com.ar/2007/07/passing-reference-to-javascript.html解释)

(function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(myVariable,'MyNewValue') 

所以,它扩展了阵列中的“表格”功能包起来。原型,我结束了这一点:

 Array.prototype.list = function(){ 
      for(var i=0;i<this.length;i++){ 
       (function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(arguments[i],this[i]) 
      } 
     } 

所以,当你调用[5,4,3,2,1].list(a,b,c,d,e);你实际上是修改对象的引用(其结果将是一个对象太)。

下面是完整的工作代码:

<!DOCTYPE html> 

<html> 
    <head><title>test</title> 
     <script type="text/javascript"> 
      Array.prototype.list = function(){ 
       for(var i=0;i<this.length;i++){ 
        (function(val){if(val)this.valueOf=this.toSource=this.toString=function(){return val};return val;}).call(arguments[i],this[i]) 
       } 
      } 
     </script> 
    </head> 
    <body> 
     <a id="test" href="#">test</a> 
     <script type="text/javascript"> 
      var a=Object(),b=Object(),c=Object(),d=Object(),e=Object(); 
      [5,4,3,2,1].list(a,b,c,d,e); 
      console.log(a,b,c,d,e); 
     </script> 
    </body> 
</html> 
+0

+1试图解决的问题。但请注意:您可以将其初始化为'var a = {}'。 – jrharshath 2012-07-11 04:39:28