Javascript 带有typeof和未定义的奇数结果
请向我解释一下,为什么我得到的是Javascript 带有typeof和未定义的奇数结果,javascript,jquery,Javascript,Jquery,请向我解释一下,为什么我得到的是0而不是5 内部HTML文件: <script> var x = 5; </script> <div id="dv"></div> 我在这里遗漏了什么?因为您的脚本是ran,就好像它是: $(function () { var x; if(typeof x == 'undefined') { x = 0; $("#dv").html(x); } else if (x == 5)
0
而不是5
内部HTML文件:
<script>
var x = 5;
</script>
<div id="dv"></div>
我在这里遗漏了什么?因为您的脚本是ran,就好像它是:
$(function () {
var x;
if(typeof x == 'undefined') {
x = 0;
$("#dv").html(x);
} else if (x == 5) {
$("#dv").html(x);
}
});
所以x
从不等于undefined
,所以它从不将其设置为0
。注意:函数中的变量x
与页面中的变量x
不同。这是因为脚本中的变量位于函数范围内
如果我正确理解您的问题,我会这样做:
<body data-x="5">
...
<div id="dv"></div>
在哪里加载js文件?在脚本标记之前或之后分配
x
?它在IIFE@Ozan当然,以前。。。在代码中创建本地x
之前,将加载x=5
,这将覆盖全局x。即使在if
子句之后提到var x=0
,x
仍然在if
之前本地重新声明(这称为提升)。然后它将是未定义的,在这种情况下,它将被定义为0
谢谢。那么,这是什么解决方法?或者这仅仅意味着我将无法在调用函数内部使用x=5
的x
?因为如果我从调用函数中删除var
,它会工作,而您的实际问题是什么?为什么不定义x?这整件事有点像呵呵:)好吧,我正试图在我得到的动态变量上操纵结果。然后我想检查一下结果。因此,如果我得到x=undefined
,我想将它定义为0
,如果它在页面上定义为x=1
,我想使用if-else
语句来输出一些特定的结果。如果它的x=2
与x=1
完全相同,但输出不同,但显然这里的重点是正确编码,以正确的方式,也就是说:)所以我现在不确定,如果我从“作用域”调用函数中删除var
,我会正确编码吗?因为就我现在所知,如果调用函数中没有var
,它应该在外部寻找它,对吗?所以它应该是正确的。还是我弄错了?
<body data-x="5">
...
<div id="dv"></div>
$(function () {
var x;
if(typeof $('body').data('x') !== 'undefined') {
$("#dv").html($('body').data('x'));
} else {
$("#dv").html(0);
}
});