console.log(名称)中的奇怪问题

时间:2017-04-17 12:03:49

标签: javascript debugging

当我为未声明的浏览器控制台中的任何变量添加console.log时,它将返回未捕获的ReferenceError:未定义变量。但是当我将console.log(name)放入浏览器时console它返回空和未定义。见下图。任何想法为什么会发生这种情况..

enter image description here

我在Chrome和Firefox开发者工具中对其进行了测试。

注意:我使用clear()清除控制台

3 个答案:

答案 0 :(得分:8)

namewindow对象中的全局变量。因此,当您进行记录时,它会查找全局值,在您的情况下,其值为空字符串("")。

console.log(name);
console.log(window.name);

答案 1 :(得分:2)

任何没有附加窗口但仍在控制台日志或浏览器中工作的内容都是全局对象,在这种情况下,您将在控制台中打印window.name。

尝试以这种方式检查,在控制台中输入以下代码:

window.name = 'stackoverflow';

然后尝试再次执行console.log(name),这次你会看到'stackoverflow'。所以基本上你在控制台中打印的名称是窗口名称......

有关window.name的更多信息,请访问以下链接:

https://developer.mozilla.org/en-US/docs/Web/API/Window/name

答案 2 :(得分:2)

这是键入语句console.log(name)时发生的事情:

  1. 您正尝试从全局执行上下文中访问变量name(在您的情况下登录到控制台)。
  2. 由于您是在全局执行上下文中调用它,因此它将检查window对象是否具有名为name的属性,因为在浏览器中,全局范围由window对象表示。
  3. 因为您之前从未声明过该变量,因此输入window.name或仅name应返回名称未定义
  4. 但它返回一个空行,这是因为window对象有一组预定义/本机属性,名称就是其中之一。
  5. window.name默认值为“”(空字符串),因此它会将空字符串记录到您​​的控制台。
  6. 现在,当您输入console.log(name100)

    时,就会发生这种情况
    1. 与之前相同(name100而非名称)。

    2. 与之前相同(name100而非名称)。

    3. 您没有声明name100也不是窗口对象的原生属性,因此只返回name100 is not defined

    4. 如果您想检查窗口对象附带的属性,可以查看以下链接: