2017-02-17 7 views
3

Jemand, den ich kenne, nur Programmieren zu lernen und sind eher zufällig auf dieses und ließ mich verwirrt:Bitte erklären diese Marotte Javascript

Bitte öffnen Sie eine Konsole (Chrome/Firefox) und Typ: var name = ['what', 'the', '...?'];

ich name erwarten würde ein Array von Strings, aber:

  • typeof name Displays string statt Array
  • dielistingVariable druckt eine Zeichenfolge anstelle eines Arrays
  • name.length ist 13 statt 3
  • Schreiben name = name.split(',') ein Array zurückgibt ["what", "the", "...?"] wie erwartet, aber name ist immer noch ein string, kein Array

name die einzige ist variabler Name, der sich so zu verhalten scheint, oder zumindest konnte ich keinen anderen finden.

Ist das nur eine Konsolenspielchen, ein JavaScript-Engine-Bug oder was?

HINWEIS: das oben genannte geschieht auf Chrome und Firefox. IE Edge funktioniert überraschend wie erwartet (typeof name ist Array und all das). Nicht in anderen Browsern getestet.

+1

Versuchen Sie es mit einem anderen Variablennamen als 'name'. https://developer.mozilla.org/en-US/docs/Web/API/Window/name – j08691

Antwort

6

window.name ist eine globale Zeichenfolge, die eine Zeichenfolge im DOM ist.

Hinweis können Sie um ihn herum erhalten, indem Sie die Variable in einem Funktionsumfang erklärt:

(function() { 
 
    var name = ['foo', 'bar']; 
 
    console.log(typeof name); 
 
})();

Was, warum IE/Edge ist anders - seine ihre Interpretation der Spezifikation und wahrscheinlich hat seit Jahren so. Es jetzt zu ändern wäre eine bahnbrechende Veränderung.

+1

warum in Edge das nicht passiert? !! – niceman

+0

@niceman es hängt davon ab, ob sie das Casting tun. –

+0

Wow, danke! habe nie daran gedacht, das zu überprüfen! – Mtz

Verwandte Themen