Javascript字符串转换问题

时间:2011-09-13 08:54:48

标签: javascript

我的javascript中发生了一些奇怪的事情,我不明白。谁能解释一下?

var adsl2pSpeed = '9500 - 12500';

        alert(adsl2pSpeed);

        if (!adsl2pSpeed) {
            alert(adsl2pSpeed);
            var adsl2pSpeed = 'Unknown';
        }


        var speed = document.getElementById("PredictedSpeed");
        speed.innerHTML = adsl2pSpeed + " b/s";

这会两次警告“Undefined”并将innerhtml设置为“Unknown”。如果我注释掉if语句,它会提醒'9500 - 12500'并将innerHTML设置为'9500 - 12500'。发生了什么?字符串是否被转换为对象,因此它变为空?

编辑:我实际上是将adsl2pSpeed注册为不在该函数中的启动脚本。为了清晰起见,我提出了它,但可能是问题?

2 个答案:

答案 0 :(得分:5)

猜测:

缩进代码在函数中。

   if (!adsl2pSpeed) {
        alert(adsl2pSpeed);
        var adsl2pSpeed = 'Unknown';
    }

你在该函数中声明一个局部变量,它掩盖了全局变量,所以它看起来是“未定义的”。

尝试删除var以避免创建新变量。

答案 1 :(得分:0)

我认为Thilo是对的。 如果代码在以下函数中:

var adsl2pSpeed = '9500 - 12500';

function test() {
 alert(adsl2pSpeed);
 if (!adsl2pSpeed) {
   alert(adsl2pSpeed);
   var adsl2pSpeed = 'Unknown';
 }
 var speed = document.getElementById("PredictedSpeed");
 speed.innerHTML = adsl2pSpeed + " b/s";
}

// some code runs ...  

test();

然后adsl2pSpeed语句中if的声明被“提升”到函数的顶部,因此该函数实际上被解释为:

function test() {
 var adsl2pSpeed;  // declaration hoisted to the top, shadows the global var
 alert(adsl2pSpeed);
 if (!adsl2pSpeed) {
   alert(adsl2pSpeed);
   adsl2pSpeed = 'Unknown';   // assignment to local var
 }
 var speed = document.getElementById("PredictedSpeed");
 speed.innerHTML = adsl2pSpeed + " b/s";
}

本文解释了它:http://bustingseams.blogspot.com/2009/08/another-javascript-pitfall-hoisting.html