Javascript 不应该';t未初始化的变量始终是未定义的类型
我遇到了一个案例,Javascript 不应该';t未初始化的变量始终是未定义的类型,javascript,node.js,initialization,standards,scope,Javascript,Node.js,Initialization,Standards,Scope,我遇到了一个案例,var的行为与直觉相反 以下是一个例子: for (var i = 0; i < 10; i++) { var toRun; if(i%2 !== 0) { toRun = {number:i}; } console.log("toRun is", toRun); if ('undefined' != typeof toRun && 'undefined' != typeof toRun.num
var
的行为与直觉相反
以下是一个例子:
for (var i = 0; i < 10; i++) {
var toRun;
if(i%2 !== 0) {
toRun = {number:i};
}
console.log("toRun is", toRun);
if ('undefined' != typeof toRun && 'undefined' != typeof toRun.number)
{
//Do something
}
}
我期待着:
toRun is undefined
toRun is { number: 1 }
toRun is undefined
toRun is { number: 3 }
toRun is undefined
toRun is { number: 5 }
toRun is undefined
toRun is { number: 7 }
toRun is undefined
toRun is { number: 9 }
这在javascript中是正常行为吗
每次执行循环中的代码时,toRunvar toRun
是否应该将toRun
设置为undefined
node -v
v0.10.33
是的,它们是javascript的正常行为。您告诉浏览器只有在未定义时才登录 而且你们确实在用正确的方法来检查“未定义”和typeof。typeof总是返回字符串。所以typeof是“未定义”的,在这种情况下,浏览器将不会记录
如果不检查就运行代码,那么只有您才能看到未定义的toRun的vlue。只有函数才能在JavaScript中创建新的作用域。变量声明被提升到最内部函数的顶部
function one() {
var a;
console.log(a);
a = 1;
}
function two() {
console.log(a);
var a = 1;
}
function three() {
console.log(a);
for(var i = 0;i < 10;i++) {
var a;
}
}
函数一(){
var a;
控制台日志(a);
a=1;
}
函数二(){
控制台日志(a);
var a=1;
}
职能三(){
控制台日志(a);
对于(变量i=0;i<10;i++){
var a;
}
}
这三个函数具有相同的行为-它们打印
未定义的
。请注意,声明已挂起,但初始化未挂起。var
语句已挂起;作业不是。如果你写var-toRun=undefined,你会得到你想要的例如,代码>,而不仅仅是var-toRun代码>@raina77ow:谢谢你为我指明了正确的方向。我不知道js会将变量的初始化移到当前函数的开头,我希望它在块级别这样做。你应该把这篇文章作为一个答案来回答这个问题。这个问题不是关于检查typeof,而是关于理解为什么每次执行代码时var没有初始化为undefined@raina77ow指出了正确的理由。
function one() {
var a;
console.log(a);
a = 1;
}
function two() {
console.log(a);
var a = 1;
}
function three() {
console.log(a);
for(var i = 0;i < 10;i++) {
var a;
}
}