Proč nové řádky JavaScriptu nefungují v HTML?

Mám následující:

<html>
  <body>
    <script type="text/javascript">
      document.write('HellonWorld')
    </script>
  </body>
</html>

Jak pravděpodobně všichni víte, n nefunguje a musím použít <br> namísto. Nebude to fungovat ani v případě, že odkazuji na externí .js soubor. Zde jsou mé otázky:

  1. Proč ne n práce?
  2. Proč <br> dokonce pracovat? Nemělo by všechno, co je uvnitř značek skriptu, být striktně JavaScript místo nečisté směsi mezi HTML a JS?
  3. Je možné vytvořit n nějak fungovat?
  4. Znám t taky nefunguje. Nějaké další věci, které v souborech HTML nefungují?
  5. Nesouvisející otázka (nechtěl jsem kvůli tomu otevírat novou otázku):Nainstaloval jsem Node.js, abych mohl vyzkoušet skripty JS zevnitř vim, ale při spuštění tohoto skriptu se zobrazí chyba „document není definován“. Totéž se stane, když to zkusím z REPL. Nějaké nápady?

Při hledání podobných otázek jsem dostal pouze to, že bych měl použít <br> místo n .

Odpověď

n funguje. Pokud máte svého druhu debugger (nebo podobný vývojářský nástroj), můžete vidět zdroj dokumentu a uvidíte, že tam skutečně je znak nového řádku. Problém je ve způsobu, jakým se na stránku díváte:ne čtete jeho zdroj, čtete jej jako dokument HTML. Prázdné znaky v HTML jsou sbaleny do jediné mezery. Takže když změníte zdroj, skutečně se změní, i když při interpretaci jako HTML dokument se tato změna nezobrazí.

Vaše chyba Node.js je s největší pravděpodobností způsobena tím, že na serveru spouštíte skripty prohlížeče. Tj. skripty, které odkazují na document jsou určeny ke spuštění v prohlížeči, kde je DOM atd. Ačkoli generický uzlový proces nemá takový globální objekt, protože to není prohlížeč. Jako takový, když se pokusíte spustit kód, který odkazuje na globální objekt s názvem document za předpokladu, že existuje stejně jako v prohlížeči, vyhodí chybu. document.write neexistuje; pokud chcete zapisovat na obrazovku, zkuste console.log nebo se podívejte na další pomocné funkce.