如果没有声明,声明变量?

时间:2011-04-29 10:24:47

标签: javascript

主题可能有点神秘,但这是我的问题(也许是一个n00b的东西?):

对于我的网站,我有一个小部件,用户可以在他们的网站上使用(例如):

<script type="text/javascript">
    var widget_width ="300";
</script>
<script src="http://something/a.js" type="text/javascript"></script>

现在,在.js文件中,我想检查用户是否已声明了widget_width变量。所以我想我可能会做一些事情(我希望变量为空,&#34;&#34;,因为我也进行了服务器端验证):

if(typeof widget_width == 'undefined') {
    var widget_width = "";
}

这没有用,也没有:

if(!widget_width) {
    var widget_width = "";
} 

有关如何在需要时以这种方式声明变量的任何想法?

5 个答案:

答案 0 :(得分:10)

删除var。把它&gt;

if(typeof widget_width == 'undefined') {
    widget_width = "";
}

答案 1 :(得分:3)

Javascript具有范围规则 - 所以当根据声明的上下文(如果在函数内,它将在当前范围内声明)声明变量时,变量在那里被声明。

如果省略'var'关键字,通过使用技巧,您可以获得在全局范围内声明的变量。

JS解释器将尝试在当前范围内找到此变量(因此在本地,在函数内),并且由于找不到它,它将尝试搜索所有父/封闭范围,直到它到达Global(最后)范围。

如果变量不存在(并且我们知道它不是由于您正在进行的检查),它将在搜索的最后一个范围(在本例中为全局)中创建它。

所以,删除'var'关键字,你会没事的......

答案 2 :(得分:0)

试试这个

if(widget_width == undefined)
{ 
   var widget_width = "";
}

答案 3 :(得分:0)

我认为你使用下面的代码如下。

 <script type="text/javascript">
    var widget_width = "300";
    TTTTTTT();
 </script>

 and other your js file

 function TTTTTTT() {

  if (typeof widget_width == 'undefined') 
  {
    alert("calling inner");    
    var widget_width = "";
  }
 }

这是工作......

答案 4 :(得分:0)

这可能超出了这个问题的范围,但我不想强调未声明未定义之间的区别,因为我发现自己多次被混淆了。

请看以下示例。

<script type="text/javascript">
var a
/* checking if defined variable a has value */
/* warning: this can't be used to check if variable is declared,
or it will raise an error */
if(a === undefined) {
    //statement will execute
    console.log('variable a has no value')
} else { 
    //statement will not execute
    console.log('should not happen')
}

//checking if variable b is defined and has declared value

if(typeof b === 'undefined') {
    //statement will execute
    console.log('variable b has not been declared before')
} else {
    //statement will not execute
    console.log('should not happen')
}
</script>

我在这种情况下使用它是安全的。 对于那些认为可以覆盖未定义的人,根据MDN

  

请注意:在现代浏览器(JavaScript 1.8.5 / Firefox 4+)中,未定义是不可配置的,不可写的符合ECMAScript 5规范的属性。即使不是这种情况,也要避免覆盖它。