将字符串转换为本地jQuery变量

时间:2016-10-28 09:32:08

标签: javascript jquery variables scope

我试图将字符串转换为变量名,在本例中是一个数组。通常我会用window [var]来做,但我在jQuery中工作:

$(function() {
   var myArray = new Array();
   var myArrayName = 'myArray';
   console.log(window[myArrayName]); // undefined
});

似乎不起作用,因为myArray位于jQuery范围内。

我知道我可以将myArrayName声明为全局变量,以便从任何地方访问它,但我不想这样做,因为我想避免全局命名空间污染。

有没有办法将字符串转换为jQuery中的变量?

2 个答案:

答案 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]);
});