【问题标题】:cast string into local jQuery variable将字符串转换为本地 jQuery 变量
【发布时间】:2016-10-28 09:32:08
【问题描述】:
我正在尝试将字符串转换为变量名,在本例中为数组。通常我会用 window[var] 来做,但我在 jQuery 中工作:
$(function() {
var myArray = new Array();
var myArrayName = 'myArray';
console.log(window[myArrayName]); // undefined
});
这似乎不起作用,因为 myArray 位于 jQuery 范围内。
我知道我可以将 myArrayName 声明为全局变量以从任何地方访问它,但我不想这样做,因为我想避免全局命名空间污染。
有没有办法在 jQuery 中将字符串转换为变量?
【问题讨论】:
标签:
javascript
jquery
variables
scope
【解决方案1】:
您可以在$(document).ready() 方法中使用this 来指向Document 对象。以下是它的工作原理:
<script type="text/javascript" src="assets/js/jquery.js"></script>
<script type="text/javascript">
(function($) {
$(document).ready(function(evt){
// this HERE POINTS TO THE DOCUMENT OBJECT
this.myArray = new Array();
this.myArrayName = 'myArray';
console.log(this); // #document (Object)
console.log(this[this.myArrayName]); // [] (Array)
});
})(jQuery);
</script>
因此,在$(document).ready() 方法中的任何位置,您始终可以通过以下任一方式访问该值:
var doc = $(document);
var arr1 = this[this.myArrayName]; //<== ASSUMES this POINTS TO DOCUMENT OBJ.
var arr2 = doc[doc.myArrayName]; //<== USES $(document) DIRECTLY
【解决方案2】:
感谢@freedomn-m 指向@friedo 回答https://stackoverflow.com/a/1664294/2466080
我在另一个数组中定义了我的数组,如下所示:
var myHash = { myArray: [] }
然后我用它来引用数组,所以代码变成了这样:
$(function() {
var myHash = { myArray: [] }
var myArrayName = 'myArray';
console.log(myHash[myArrayName]);
});