Javascript字符串转换问题

Javascript字符串转换问题,javascript,Javascript,在我的javascript中发生了一些奇怪的事情,我不明白。有人能解释一下吗 var adsl2pSpeed = '9500 - 12500'; alert(adsl2pSpeed); if (!adsl2pSpeed) { alert(adsl2pSpeed); var adsl2pSpeed = 'Unknown'; } var speed = document.getEl

在我的javascript中发生了一些奇怪的事情,我不明白。有人能解释一下吗

var adsl2pSpeed = '9500 - 12500';

        alert(adsl2pSpeed);

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


        var speed = document.getElementById("PredictedSpeed");
        speed.innerHTML = adsl2pSpeed + " b/s";
这会两次警告“未定义”,并将innerhtml设置为“未知”。如果我注释掉If语句,它会警告“9500-12500”,并将innerHTML设置为“9500-12500”。发生了什么事?字符串是否被强制转换为对象,使其变为null

编辑:我实际上是将adsl2pSpeed注册为启动脚本,而不是在函数中。为了清晰起见,我把它调高了,但可能这就是问题所在?

推测:

缩进代码位于函数中

   if (!adsl2pSpeed) {
        alert(adsl2pSpeed);
        var adsl2pSpeed = 'Unknown';
    }
您在该函数中声明了一个局部变量,它屏蔽了全局变量,因此它看起来“未定义”

尝试删除
var
以避免生成新变量。

推测:

缩进代码位于函数中

   if (!adsl2pSpeed) {
        alert(adsl2pSpeed);
        var adsl2pSpeed = 'Unknown';
    }
您在该函数中声明了一个局部变量,它屏蔽了全局变量,因此它看起来“未定义”

尝试删除
var
以避免生成新变量。

我认为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();
然后,
if
-语句中的
adsl2pSpeed
声明被“提升”到函数的顶部,因此函数的实际解释如下:

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";
}
本文对此进行了解释:

我认为蒂洛是对的。 如果代码位于以下函数中:

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();
然后,
if
-语句中的
adsl2pSpeed
声明被“提升”到函数的顶部,因此函数的实际解释如下:

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";
}

本文对此进行了解释:

Testcase请。看缩进,真正的代码在前两行之间有东西……这就是你的代码吗?或者函数中有什么东西?还有其他东西在发生。这把小提琴很好用。。。你用的是什么浏览器?你的标记是什么?你有没有加载任何时髦的库等…?不适合我:。向我们展示代码的其余部分。顺便说一句,在
varadsl2pspeed='Unknown'之前不需要
var
。。。变量adsl2pSpeed已经声明。@Matt:我认为是
var
导致了这个问题,因为缩进的代码在它自己的函数中(Tom没有告诉我们),而
var
生成了一个新的局部变量。请测试用例。看缩进,真正的代码在前两行之间有东西……这就是你的代码吗?或者函数中有什么东西?还有其他东西在发生。这把小提琴很好用。。。你用的是什么浏览器?你的标记是什么?你有没有加载任何时髦的库等…?不适合我:。向我们展示代码的其余部分。顺便说一句,在
varadsl2pspeed='Unknown'之前不需要
var
。。。变量adsl2pSpeed已经声明。@Matt:我认为
var
是导致问题的原因,因为缩进的代码在它自己的函数中(Tom没有告诉我们),而
var
生成了一个新的局部变量。+1似乎是最明显的原因。如果OP提到(如果确实如此…)+1似乎是最明显的原因,这会有所帮助。如果OP提到这一点(如果确实如此…)会有所帮助