2017-04-17 13 views
4

は、私はそれが捕捉されないにReferenceErrorを返します宣言されていないされているブラウザのコンソールで任意の変数のためのconsole.logを入れるとき:変数は .Butに定義されていない私は、ブラウザのコンソールでconsole.log(name)を入れたときに、それが空を返します未定義です。下の画像を参照してください。これがなぜ起こるか任意のアイデア..奇妙な問題が

enter image description here

私はChromeとFirefoxの開発者向けツールでそれをテストしました。

注:私は(クリア使用)コンソール

+0

を'' '(空文字列)は未定義ではありません。 'undefined'は' console.log'自体のrturnされた値です(空行と 'undefinedの前に' <'を見てください)! –

答えて

8

nameをクリアするには、windowオブジェクトであるグローバル変数です。だから、ログすると、グローバルなものが見つかる。値は空文字列("")だ。

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

2

ウィンドウがそれに取り付けられており、まだコンソールログまたはブラウザで働いていないものは、あなたのコンソールでwindow.nameを印刷している。この場合には、グローバルオブジェクトです。再びにconsole.log(名前)を実行しようとしますが、この時あなたは「stackoverflowの」を見て表示されます次に

window.name = 'stackoverflow'; 

は、以下のコードを入力し、あなたのコンソールで、それをチェックするためにこの方法を試してみてください。

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

2

これは時に何が起こっているですので、基本的に、あなたのコンソールに印刷されている名前は、ウィンドウ名... window.nameについての詳細情報については

は、以下のリンクを参照してください、ですあなたは(あなたのケースでは、コンソールにログインする)グローバル実行コンテキスト内から変数nameにアクセスしようとしている

  1. :あなたは声明console.log(name)を入力します。
  2. グローバル実行コンテキスト内から呼び出すので、ブラウザでグローバルスコープがwindowオブジェクトで表されるため、windowオブジェクトにnameというプロパティがあるかどうかをチェックします。
  3. 以前にその変数を宣言したことがないので、window.nameまたはnameと入力すると、という名前が返されます。
  4. ですが、空白の行が返されます。これは、windowオブジェクトに事前定義済みのネイティブプロパティセットがあり、その名前がその1つであるためです。
  5. window.nameのデフォルト値は ""(空の文字列)なので、空の文字列をコンソールに記録します。

これは、あなたがconsole.log(name100)を入力する際に​​何が起こっているかである:

(名前の代わりにname100)前と同じ
  1. 以前と同じです(nameではなくname100)。

  2. あなたはname100もウィンドウオブジェクトのネイティブプロパティではないので、単にname100 is not definedを返します。

場合は、このリンクをチェックすることができ、ウィンドウオブジェクトが同梱されていますたいチェックのプロパティ:name`is `