主题可能有点神秘,但这是我的问题(也许是一个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 = "";
}
有关如何在需要时以这种方式声明变量的任何想法?
答案 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规范的属性。即使不是这种情况,也要避免覆盖它。