Javascript字符串转换问题
在我的javascript中发生了一些奇怪的事情,我不明白。有人能解释一下吗Javascript字符串转换问题,javascript,Javascript,在我的javascript中发生了一些奇怪的事情,我不明白。有人能解释一下吗 var adsl2pSpeed = '9500 - 12500'; alert(adsl2pSpeed); if (!adsl2pSpeed) { alert(adsl2pSpeed); var adsl2pSpeed = 'Unknown'; } var speed = document.getEl
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提到这一点(如果确实如此…)会有所帮助