【问题标题】: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]);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2010-09-30
      • 2021-12-09
      • 2011-08-27
      • 2010-12-04
      相关资源
      最近更新 更多