JavaScript替代方案
在我工作的一些项目中,添加了一些具有以下语法的块:JavaScript替代方案,javascript,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]); 但是,一些浏览器,如谷歌浏览器和歌剧院不支持
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]);
但是,一些浏览器,如谷歌浏览器和歌剧院不支持这个“功能”。有人知道这是JS未来的一个功能,还是已经被弃用了?如果不推荐,是否有一些漂亮的替代品
谢谢大家。这可能是ECMAScript未来的一项功能,目前已在Firefox中提供
参见:
对于类似的讨论-不幸的是,目前似乎不存在跨浏览器解决方案-使用临时变量更安全它不像您建议的代码那么好,但我认为它看起来相当不错,尽管您确实需要采取一些变通办法: 首先,我们的想法是为调用此函数创建一个干净的语法,例如:
[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();
一旦它们成为对象,您就可以通过引用修改它们的值(如下所述)
因此,将其包装在一个扩展Array.prototype的“list”函数中,我最终得出以下结论:
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])
}
}
请参阅此答案:+1以尝试解决此问题。不过请注意:您可以初始化为
var a={}
。
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])
}
}
<!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>