使用window []访问变量内容

时间:2014-03-12 13:06:54

标签: javascript jquery

我正在尝试根据变量名在主div中设置内容。例如,如果我运行:changeMain(nearbyCows)我希望看到' tehe'而是看起来窗口[页面]未定义。有什么想法吗?

function changeMain(page) {
    var nearbyCows = "<a>tehe</a>";
    var nearbyChickens = "<b>lol</b>";
    var search = "<i>meh</i>";

    $("main").html(window[page]);
}

4 个答案:

答案 0 :(得分:1)

您正在函数范围内创建此变量。 window的属性指的是全局范围。如果要使用这样的全局范围,则需要将变量声明移出函数:

var nearbyCows = '<a>tehe</a>';
var nearbyChickens = '<b>lol</b>';
var search = "<i>meh</i>";
function changeMain(page) {
    $("main").html(window[page]);
}

但是,那么你基本上只是使用window作为查找哈希,并且保持自己的查找对象而不是选择全局更好更清晰。

例如:

var MainChanger = {
    nearbyCows: '<a>tehe</a>',
    nearbyChickens: '<b>lol</b>',
    search: "<i>meh</i>",
    change: function(page) {
        $('#main').html(this[page]);
    }
};

MainChanger.change('nearbyCows');

答案 1 :(得分:0)

var nearbyCows未在全局范围内定义,而是作为局部变量定义,请使用:nearbyCows = "<a>tehe</a>";而不使用指令var

答案 2 :(得分:0)

使用对象,而不是单独的变量:

function changeMain(page) {
    var items = { nearbyCows: "<a>tehe</a>",
                  nearbyChickens: "<b>lol</b>",
                  search: "<i>meh</i>"
    };
    $("#main").html(items[page]);
}

然后你可以这样称呼它:

changeMain('nearbyCows');

答案 3 :(得分:0)

你必须知道有多种类型的变量。

你有一个分配窗口的全局变量(不是一个好习惯)。你可以这样声明:

window.varName = ...;
window['varName'] = ...;
varName = ...;

存在变量范围,这是声明变量的常用方法:

var varName = ...;

这些变量可由内部范围访问,但外部范围不可访问。

还有对象属性。您创建一个对象并分配值:

var obj = {};
obj.varName = ...;
obj['varName'] = ...;

如果你看到,你无法使用动态字符串访问范围变量,则需要对象或全局变量。 :

function changeMain(page) {
    //Global variable, not recommended
    window.nearbyCows = "<a>tehe</a>";
    window.nearbyChickens = "<b>lol</b>";
    window.search = "<i>meh</i>";

    $("main").html(window[page]);
 }

或:

var obj = {} //Declare outside if you want to access it outside the function
function changeMain(page) {
    // var obj = {}; //or inside if you want it to be a private variable
    //Object properties, recommended
    obj.nearbyCows = "<a>tehe</a>";
    obj.nearbyChickens = "<b>lol</b>";
    obj.search = "<i>meh</i>";

    /*Alternative declaration, faster to process :
    obj = {
        nearbyCows : "<a>tehe</a>",
        nearbyChickens : "<b>lol</b>",
        search : "<i>meh</i>"
    }*/

    $("main").html(obj[page]);
 }