首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript字符串转换问题

问Javascript字符串转换问题
EN

Stack Overflow用户
提问于 2011-09-13 08:54:48
回答 2查看 109关注 0票数 0

在我的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";

这两次提醒“未定义”,并将innerhtml设置为“未知”。如果我注释掉If状态,它会提醒‘9500-12500’,并将innerHTML设置为‘9500-12500’。发生什么事了?字符串是否被强制转换为对象,从而使其变为空?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-13 08:59:54

猜测:

缩进代码位于一个函数中。

代码语言:javascript
复制
   if (!adsl2pSpeed) {
        alert(adsl2pSpeed);
        var adsl2pSpeed = 'Unknown';
    }

在这个函数中,您声明了一个局部变量,它掩盖了全局变量,因此它看起来“未定义”。

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

票数 5
EN

Stack Overflow用户

发布于 2011-09-13 09:29:10

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

代码语言:javascript
复制
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-statement中的声明“悬挂”到函数的顶部,这样函数实际上被解释为如下:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7399183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档