创建的所有javascript对象成员都相等

are all javascript object members created equal?

本文关键字:成员 对象 javascript 创建      更新时间:2023-09-26

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

如果在铬控制台中,我键入。。。

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];  

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

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

如果jQuery.ui存在,我应该如何判断?

最简单的是:

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

如果"jQuery.ui"名称包含在一个字符串变量中,我将如何使用该变量来检查是否存在

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

如果"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));