2017-04-17 274 views
4

,当我把console.log在浏览器控制台其中有未申报的,将返回未捕获的ReferenceError任何变量:变量没有定义。但是当我在浏览器控制台把console.log(name)返回空和未定义。看到下面的图片。任何想法,为什么发生这种情况..奇怪的问题

enter image description here

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

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

+0

'name'is不是未定义它的'“”(空字符串)。 'undefined'是'console.log'本身的rturned值(注意空行和'''undefined'前面)! –

回答

8

name是一个全局变量这是在window对象。所以当你登录时,它会发现全局的,这个值是空字符串("")。

console.log(name); 
 
console.log(window.name);
不具有连接到该窗口并在控制台日志或浏览器仍在工作

2

什么是一个全局对象,在这种情况下,你在你的控制台打印window.name。

尝试检查这种方式,在控制台中键入下面的代码:

window.name = 'stackoverflow'; 

然后再次尝试做的console.log(名称),你会看到这个时候你看到“计算器”。所以基本上你在你的控制台打印的名字,是窗口名称...

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

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

2

这是发生了什么事时,您键入声明console.log(name)

  1. 你正试图从全球执行上下文(登录到控制台在您的案件)中访问变量name
  2. 由于您是从全局执行上下文中调用它,它将检查window对象是否具有名为的属性,因为在浏览器中,全局范围由window对象表示。
  3. 因为你以前从未声明过这个变​​量,所以打字window.name或者只是name应该返回姓名未定义
  4. 但它返回一个空行,这是因为window对象具有一组预定义/本机属性,名称就是其中之一。
  5. window.name缺省值为“”(空字符串),因此它将一个空字符串记录到控制台。

现在,这是发生了什么事,当你键入console.log(name100)

  1. 和以前一样(name100而不是名称)。

  2. 和以前一样(name100代替名字)。

  3. 您还没有声明name100,它既不是窗口对象的本地属性,所以它只是返回name100 is not defined

如果是随窗口对象,你可以检查此链接,你想检查属性: