質問: createElement("div"); document.body.appendChild(a); ``` は正しい書き方です。 これはjavascriptのプロパティはオブジェクトしか参照できず(div)とか("div")はオブジェクトではないのでjavascriptが解釈することは不可能で、createElement("div")ならHTMLDOMでnodeと呼ばれているDOMオブジェクトなのでjavascriptが理解できるためappendChildで正常に処理されるということなのかなと思ったのですが、これって適切な解釈でしょうか。 それとなのですが、結局プロパティと呼ばれるものはすべてがjavascriptオブジェクトでしょうか。
回答: いいえ, 違います. **JavaScriptの文法**と**HTMLDOMとしての作法**をごっちゃにしています. プログラムが正しく動作するには次の3つのステップを通過する必要があります. 1. プログラム言語(例えばJavaScript)の文法として正しいこと 2. 利用しているAPI(例えばHTMLDOM)の使い方が適切であること 3. 自分意図としたとおりにプログラムが動作すること この視点で眺めると, ``` document.body.appendChild(div); ``` ``` document.body.appendChild("div"); ``` これらのコードはJavaScriptの文法下では**正しいコード**です. ですが, HTMLDOMの使い方としては, 前者は「変数`div`に格納されているものが`Element`でなかった場合にエラーとなる」後者は「`appendChild`メソッドには文字列を渡すことが出来ない」という点で問題のあるコードと言えます. > > これはjavascriptのプロパティはオブジェクトしか参照できず(div)とか("div")はオブジェクトではないのでjavascriptが解釈することは不可能で、createElement("div")ならHTMLDOMでnodeと呼ばれているDOMオブジェクトなのでjavascriptが理解できるためappendChildで正常に処理されるということなのかなと思ったのですが、これって適切な解釈でしょうか。 > > > もっとシンプルに, 「全てのメソッド・ファンクション・プロパティには受け入れ可能なデータの型がある. もしおかしな型が渡されると(これ以上コードを実行できないと判断し)エラーを発生する.」 と考えて下さい. JavaScriptとして実行できている以上JavaScriptはコードの内容を**理解**出来ています. しかし, それを実行した際にHTMLDOMとして間違った使い方をしているのでエラーが発生しているのです. > > それとなのですが、結局プロパティと呼ばれるものはすべてがjavascriptオブジェクトでしょうか。 > > > プロパティは(オブジェクトに結びついた)変数の一種ですから, 「すべてがjavascriptオブジェクト」と言うには語弊があります. 基本的に何が入っているかは場合によりけりです.