我试图将字符串转换为变量名,在本例中是一个数组。通常我会用window [var]来做,但我在jQuery中工作:
$(function() {
var myArray = new Array();
var myArrayName = 'myArray';
console.log(window[myArrayName]); // undefined
});
似乎不起作用,因为myArray位于jQuery范围内。
我知道我可以将myArrayName声明为全局变量,以便从任何地方访问它,但我不想这样做,因为我想避免全局命名空间污染。
有没有办法将字符串转换为jQuery中的变量?
答案 0 :(得分:3)
您可以使用this
方法中的$(document).ready()
指向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
答案 1 :(得分:0)
感谢@ freedomn -m指向@friedo回答https://stackoverflow.com/a/1664294/2466080
我在另一个数组中定义了我的数组:
var myHash = { myArray: [] }
然后我用它来引用数组,所以代码转向:
$(function() {
var myHash = { myArray: [] }
var myArrayName = 'myArray';
console.log(myHash[myArrayName]);
});