Javascript 未捕获引用错误和未定义错误之间的区别是什么?
在以下代码中,有两个“未定义”实例: A: 这会导致控制台显示“a”的“未定义” B:Javascript 未捕获引用错误和未定义错误之间的区别是什么?,javascript,Javascript,在以下代码中,有两个“未定义”实例: A: 这会导致控制台显示“a”的“未定义” B: 这将创建“未捕获引用错误:未定义”。在这两种情况下,a都是未定义的,控制台会告诉您。但为什么它会根据上下文选择不同的方式呢?除了undefined和null之外,还有几种形式的“undefined”吗?第一个代码被视为如下,因为 在第二个代码中,a从未定义。尝试访问这些变量将导致抛出ReferenceError 下面是一篇阅读更多有关提升的文章 简单的规则是: 如果变量已声明且未分配任何值,则该变量为未定义
这将创建“未捕获引用错误:未定义”。在这两种情况下,a都是未定义的,控制台会告诉您。但为什么它会根据上下文选择不同的方式呢?除了undefined和null之外,还有几种形式的“undefined”吗?第一个代码被视为如下,因为
在第二个代码中,
a
从未定义。尝试访问这些变量将导致抛出ReferenceError
下面是一篇阅读更多有关提升的文章
简单的规则是:
// Variable is declared, but without a value (undefined)
var a;
b();
console.log(a);
a = "Hello World!";
function b() {
console.log("Called b!");
}
这就是为什么在第二种情况下会出现错误:变量a没有在任何地方定义。也许更好的标题更合适?我在谷歌上搜索并阅读了有关数据类型的内容。不要假设人们不使用谷歌。将来,人们会用谷歌搜索一个产生这个问题的查询,并浪费时间阅读你的陈词滥调“谷歌it”回答,而不是仅仅回答这个问题。我个人认为错误信息应该是“
a
未声明”,这肯定会比“未定义”更清楚……)meta:@BarAkiva“只需谷歌一下”的评论不允许出现在Stackoverflow上,因为它们没有用处。尽管如此,阿斯基人通常会提供一些证据,表明他们已经在别处寻找答案,但什么也没找到。我不确定这在这里有多适用,但简而言之,这就是stackoverflow策略。我看不出有什么理由他们会给它贴上这样的标签,因为它让我觉得有一些秘密“未定义”我还没有读到。你更快了。。。该死等等。。从技术上讲,在这个示例中(我在dev工具中测试过),console.log(a)不会抛出引用错误。。。但假设您只是随机执行了console.log(x),它将抛出一个引用错误,因为x从未被声明过……而a是被声明的,只是从未定义过
b();
console.log(a);
function b() {
console.log("Called b!");
}
var a; // Declare the variable
// Move function definitions to the top
function b() {
console.log("Called b!");
}
b();
console.log(a); // Undefined, no value assigned yet
a = "Hello World!";
console.log(a); // Hello World!
// Variable is declared, but without a value (undefined)
var a;
b();
console.log(a);
a = "Hello World!";
function b() {
console.log("Called b!");
}