当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中的解构赋值

如何解决《JavaScript中的解构赋值》经验,为你挑选了1个好方法。

正如在JavaScript 1.7的Mozilla changlog中可以看到的,他们已经添加了解构分配.可悲的是,我不是很喜欢这种语法(为什么要写a和b两次?):

var a, b;  
[a, b] = f();

这样的事情会好很多:

var [a, b] = f();

这仍然是向后兼容的.类似Python的解构不会向后兼容.

无论如何,我能够想出的最好的JavaScript 1.5解决方案是:

function assign(array, map) {
    var o = Object();
    var i = 0;
    $.each(map, function(e, _) {
        o[e] = array[i++];
    });
    return o;
}

其工作方式如下:

var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2

但这真的很糟糕,因为_没有任何意义.它只是一个存储名称的空壳.但遗憾的是它需要因为JavaScript没有指针.在正面,您可以在值不匹配的情况下指定默认值.另请注意,此解决方案不会尝试切片阵列.所以你不能做类似的事情{first: 0, rest: 0}.但如果有人想要这种行为,那很容易做到.

什么是更好的解决方案?



1> Shog9..:

首先,var [a, b] = f()在JavaScript 1.7中工作正常 - 试试吧!

其次,你可以顺利进行,使用语法略有使用with():

var array = [1,2];
with (assign(array, { var1: null, var2: null }))
{
   var1; // == 1
   var2; // == 2
}

当然,这不允许你修改现有变量的值,所以恕我直言,它比JavaScript 1.7功能更有用.在代码中,我正在写现在,我只返回对象直接和参考其成员-我会等待1.7功能越来越广泛.


@Marcin:JavaScript 1.7中是[Mozilla的唯一的语言(http://stackoverflow.com/questions/1330498/what-is-cross-browser-support-for-javascript-1-7s-new-features-specifically- AR).
请注意,`with`可能很危险,因为[Mozilla自己的文档](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/with)声明"不建议使用with,并且在ECMAScript 5严格模式下被禁止.建议的替代方法是将要访问其属性的对象分配给临时变量."
截至今天`var [a,b] = [1,2];`导致Chrome中出现语法错误.
将于2015年中左右在ECMAScript 6中提供,请参阅http://en.wikipedia.org/wiki/ECMAScript
在严格的模式中也禁止使用`with`,这是一个非常有用的*模式...
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有