【问题标题】:are all javascript object members created equal?所有创建的 javascript 对象成员都是平等的吗?
【发布时间】:2014-10-03 06:27:16
【问题描述】:

对于我加载了 jquery 和 jquery.ui 的网站,我尝试了以下实验。

如果我在 chrome 控制台中输入...

jQuery.ui
>Object {version: "1.9.1", keyCode: Object, ie: false, ie6: false, plugin: Object…}

但如果我问它的类型,我会得到..

typeof this["jQuery.ui"]
>"undefined"

有人能解释这是为什么吗? 我将/应该如何判断 jQuery.ui 是否存在?....如果“jQuery.ui”名称包含在字符串变量中,我将如何使用该变量来检查存在性..例如

var myvar = "jQuery.ui";
typeof this[myvar];  

【问题讨论】:

  • 您需要使用this["jQuery"]["ui"] 来获取属性的属性。只需执行typeof jQuery.ui。为什么要将“名称”作为字符串值?
  • 在这里查看我的答案stackoverflow.com/questions/18891939/…
  • 所以我从这里收集到,使用字符串引号我可以调用一个涉及句点的变量,例如。 jQuery.ui。但是如果我真的想引用一个属性的属性,我需要像上面的 Bergi 所说的那样拆分它。至于为什么,我正在编写一个通用的 javascript 加载例程,并认为这样做会很有趣。

标签: javascript jquery-ui


【解决方案1】:

当您键入 jQuery.ui 时,您正在访问全局变量 jQuery,然后向该对象询问名为 ui 的属性。

this["jQuery.ui"] 向全局对象询问名为"jQuery.ui" 的属性。这是完全不同的事情。

我将/应该如何判断 jQuery.ui 是否存在?

最简单的是:

if (jQuery && jQuery.ui) {
  // jQuery.ui exists
}

如果“jQuery.ui”名称包含在字符串变量中,我将如何使用该变量来检查存在性

不要这样做。不要将变量的名称存储为字符串。这是个坏主意。尤其是在您尝试检查全局变量时。

【讨论】:

    【解决方案2】:

    如果“jQuery.ui”名称包含在字符串变量中,我将如何使用该变量来检查存在性

    如果你真的想做到这一点,试试下面的代码:

    function existsOn(prop, obj){
        var parts = prop.split('.');
        for(var i=0; i < parts.length; i++){
            obj = obj[parts[i]];
            if(!obj){
                return false;
            }
        }
        if(obj){
            return true;
        }
        return false;
    }
    var str = "jQuery.ui";
    alert("Exists: " + existsOn(str, window));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多