ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の総合版、1/2 ページ_JavaScript スキル

JavaScript の総合版、1/2 ページ_JavaScript スキル

PHP中文网
PHP中文网オリジナル
2016-05-16 19:05:301023ブラウズ

プログラミングの世界には基本要素が 2 つだけあり、1 つはデータ、もう 1 つはコードです。プログラミングの世界は、データとコードが分かちがたく絡み合い、無限の生命力を発揮します。

データは本来静かで、常にその固有の性質を維持しようとしますが、コードは自然に活発で、常に世界を変えようとします。

ご存知のとおり、データ コード間の関係は、物質とエネルギーの関係に驚くほど似ています。データにも慣性があり、外力を加えるコードがなければ常に元の状態を維持します。コードはエネルギーのようなもので、その存在の唯一の目的は、データの元の状態を変更するために一生懸命働くことです。コードがデータを変更すると、データの抵抗により、コードの元の傾向にも影響が生じたり、変化したりすることになります。場合によっては、データをコードに変換したり、コードをデータに変換したりすることもできます。E=MC2 のようなデジタル変換式も存在します。しかし、このデータとコードの間の矛盾しながらも統一された操作には、コンピューターの世界の法則が常に反映され、これらの法則はまさに私たちが作成するプログラム ロジックです。

ただし、プログラマーによって世界観が異なるため、これらのデータとコードは異なって見えます。その結果、異なる世界観を持つプログラマーが独自の方法論を用いてプログラミングの世界の進化と発展を推進しています。

ご存知のとおり、今日最も人気のあるプログラミングのアイデアはオブジェクト指向プログラミングです。なぜオブジェクト指向の考え方がプログラミングの世界で急速に普及するのでしょうか?なぜなら、オブジェクト指向の考え方では、データとコードが初めて 1 つに結合され、それが単純なオブジェクト概念でプログラマーに提示されるからです。これにより、元の乱雑なアルゴリズムやサブルーチン、および絡み合った複雑なデータ構造が突然、明確で整然としたオブジェクト構造に分割され、私たちの心の中にあるデータとコードの乱雑な結び目が明確になります。私たちはより明晰な心を持ち、別のレベルの思考からより広大なプログラミングの世界を探索することができます。

第 5 世祖ホンレンは『対象真経』の説法を終えた翌日、弟子たち全員にこう言いました。読む。 "。最年長の弟子である沈秀は、最も理解力のある兄弟として認められており、彼の詩には次のように書かれています。ほこりを上げてください!」この聖句が出てくるとすぐに、兄弟たちの間ですぐにセンセーションを巻き起こし、とてもよく書かれていると皆が言いました。火の頭の僧侶フイだけがそれを見て、静かにため息をつき、壁にこう書きました。「この物体には根がなく、活字も目に見えません。そもそも何もないのに、どこで塵が発生するのでしょうか?」それから彼は首を振って立ち去りました。慧能のガタを読んだ人は皆、「めちゃくちゃに書かれていて理解できない」と言います。紅蓮先生は沈秀の詩を読んで賞賛にうなずき、それから恵能の詩を見て静かに首を横に振った。その夜、紅蓮は静かに慧能を瞑想室に呼び、長年大切にしていたソフトウェア経典を教え、月明かりの下で一晩逃げるように頼みました...

その後、慧能は本当に逃げませんでした。師父の高い期待に応えて、彼は南に禅宗のもう一つの広大な空を創造しました。フイネンが持ち去ったソフトウェア教典の一つが「JavaScript教典」だった!

シンプルさに戻る

JavaScript を理解するには、まずオブジェクトとクラスの概念を手放し、データとコードの原点に戻る必要があります。前述したように、プログラミングの世界にはデータとコードという 2 つの基本要素しかなく、これら 2 つの要素は絡み合っています。 JavaScript は、データとコードを最も原始的なレベルまで単純化します。

JavaScript のデータは非常に単純です。単純なデータには、未定義、null、ブール、数値、文字列の 5 つのタイプしかありませんが、複雑なデータにはオブジェクトという 1 つのタイプしかありません。これは、世界の最も基本的な要素を金属、木、水、火、土に分類し、他の複雑な物質はこれら 5 つの基本要素から構成されるという古典的な中国の単純唯物論に似ています。

JavaScript のコードは、関数という 1 つの形式にのみ反映されます。

注: 上記の単語はすべて小文字です。Number、String、Object、Function などの JavaScript 組み込み関数と混同しないでください。ご存知のとおり、JavaScript 言語では大文字と小文字が区別されます。

JavaScript の識別子、定数、変数、パラメーターは、unfined、null、bool、number、string、object、および function 型の 1 つです。 typeof の戻り値で示される型。これ以外のタイプはありません。

まず単純なデータ型について説明します。

未定義: すべての未知のもの、何もないもの、想像できないものを表し、コードはそれを処理できません。
注: Typeof (未定義) 戻り値も未定義です。
未定義を任意の変数またはプロパティに割り当てることができますが、変数がクリアされるわけではなく、追加のプロパティが追加されます。

null: 概念はありますが、何もありません。何もないところに何かがあるように見え、何かの中に何もないように見える。想像するのは難しいですが、すでにコードで処理できます。
注: Typeof (Null) は Object を返しますが、NULL は Object ではなく、NULL 値を持つ変数は Object ではありません。

ブール値: はい、いいえ、いいえ、疑いはありません。正しいことは正しい、間違っていることは間違っている、絶対に明らかです。コードによって処理でき、コードのフローを制御することもできます。

数: 直線的なもの、大きさと順序が明確、多数ではあるが無秩序ではない。コードのバッチ処理を容易にし、コードの反復とループも制御します。
注: Typeof (nan) と Typeof (Infinity) はどちらも Number を返します。
数値計算に関与する NaN の構造は NaN であり、NaN != NaN です。
無限 / 無限 = NaN。

文字列: 機械の信号ではなく、人間にとって合理的なもの。人間とコンピューターの情報通信、人間の意図のコード理解などはすべてそれに依存しています。

単純型はオブジェクトではありません。JavaScript にはこれらの単純型をオブジェクト化する機能がありません。単純型の定数値が直接割り当てられている識別子、変数、パラメータはオブジェクトではありません。

いわゆる「オブジェクト化」とは、データとコードを複雑な構造に編成する機能です。 JavaScript では、オブジェクト型と関数型のみがオブジェクト化機能を提供します。

クラスなし

オブジェクトはオブジェクトのタイプです。 JavaScript では、データやコードがどれほど複雑であっても、それらをオブジェクトの形式でオブジェクトに整理できます。

しかし、JavaScript には「クラス」という概念がありません。

多くのオブジェクト指向プログラマーにとって、これはおそらく JavaScript を理解するのが最も難しいことです。はい、ほとんどすべてのオブジェクト指向の本で最初に話されるのは、オブジェクト指向の柱である「クラス」の概念です。突然「カテゴリー」がなくなり、私たちは精神的な支えを失ったように感じ、自分に主人がいないように感じます。オブジェクトやクラスを手放して、「オブジェクトにルートがなく、型が見えない」状態に到達するのは簡単ではないようです。

それでは、まず JavaScript プログラムを見てみましょう:


[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]


この JavaScript プログラムは、最初に生命オブジェクト life を生成しましたが、生命が誕生したとき、それはプロパティやメソッドを持たない単なるオブジェクトでした。最初のライフプロセスには、「卵細胞」のように見える body 属性と Say メソッドがあります。第二の人生で「尻尾」と「エラ」が生えた、それは明らかに「オタマジャクシ」だった。 3度目の人生で尾と鰓の属性は消失したが、「4本の足」と「肺」が生え、脚と肺の属性を獲得し、最終的には「カエル」となった。豊かな想像力があれば、ハンサムな「王子様」に変身させたり、美しい「お姫さま」などと結婚させたりすることもできるかもしれません。ただし、このプログラムを読んだ後、次の質問について考えてください:

クラスは必ず必要ですか?

子供の頃、「母親を探している小さなオタマジャクシ」についてのおとぎ話をまだ覚えていますか?おそらく昨夜、あなたのお子さんはたまたまこの美しいおとぎ話を聞きながら眠りに落ちたのでしょう。かわいい小さなオタマジャクシは、自分の種類が進化し続けるうちに、徐々に母親と同じ「種類」になり、母親を見つけました。このおとぎ話に含まれるプログラミングの哲学は次のとおりです。オブジェクトの「クラス」はゼロから生まれ、進化し続け、最終的には消滅します...

「クラス」は確かに複雑な現実世界を理解するのに役立ちます、この混沌とし​​た現実世界は分類する必要があります。しかし、思考が「カテゴリー」に縛られてしまうと、「カテゴリー」が「飽き」てしまいます。想像してみてください。生物が最初から固定の「クラス」を割り当てられたとしても、進化することはできるでしょうか?オタマジャクシはカエルになれるでしょうか?おたまじゃくしが母親を探している話も子供たちに話してもらえますか?

したがって、JavaScript には「クラス」は存在せず、クラスはオブジェクトと統合されて見えなくなります。 「クラス」という概念を手放したからこそ、JavaScriptのオブジェクトは他のプログラミング言語にはない生命力を持っています。

この時、心の奥底で何かを感じ始めたら、あなたは徐々に JavaScript の禅を理解し始めています。

関数の魔法

次に、JavaScript 関数の魔法について説明します。

JavaScript コードには関数という形式が 1 つだけあり、関数は関数の型です。おそらく他のプログラミング言語にはプロシージャやメソッドなどのコード概念がありますが、JavaScript では関数の形式は 1 つだけです。関数を記述するときは、関数型のエンティティを作成するだけです。次のプログラムを見てください:


[Ctrl A を押してすべて選択 注: 外部 Js を導入する必要がある場合は、実行前に更新する必要があります]


このコードは実行後に見ることができます。 typeof(myfunc) が返すのは function です。上記の関数の書き方を「定義式」と呼びますが、次のような「変数式」に書き換えると分かりやすくなります:


[Ctrl A Full Optional note:外部 Js を導入する必要がある場合は、実行前にリフレッシュする必要があります]


ここでは変数 myfunc が明確に定義されており、その初期値が関数エンティティに代入されています。したがって、typeof(myfunc) も関数を返します。実際、これら 2 つの関数の記述方法は同等であり、いくつかの小さな違いを除いて、それらの内部実装はまったく同じです。つまり、作成する JavaScript 関数は単なる名前付き変数であり、変数の型は関数であり、変数の値は作成した関数のコード本体です。

賢明な方は、すぐにさらに質問するかもしれません。関数は単なる変数なので、変数には任意に値を割り当てて、どこでも使用できるのでしょうか?

次のコードを見てみましょう:


[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]


このプログラムを実行した結果、答えは「はい」であることがわかります。関数が初めて呼び出された後、関数変数には新しい関数コード本体が割り当てられるため、関数が 2 回目に呼び出されるときは、異なる出力が表示されます。

さて、上記のコードを最初に定義した関数形式に変更しましょう:


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新する必要があります。実行する]


まったく同じシグネチャを持つ 2 つの関数が他のプログラミング言語では違法であるのは当然です。しかし、JavaScript ではこれが当てはまります。しかし、プログラムを実行した後、奇妙な現象が発見されました。2 つの呼び出しは、最後の関数によって出力された値だけでした。明らかに、最初の関数は何も行いません。これはなぜでしょうか?

JavaScript 実行エンジンはプログラムを 1 行ずつ解析して実行するのではなく、プログラムを部分的に解析して実行することがわかりました。また、同じプログラムの解析と実行では、定義されている関数ステートメントが最初に抽出されて実行されます。関数定義の実行後、他のステートメントコードが順番に実行されます。つまり、myfunc が初めて呼び出される前に、最初の関数ステートメントによって定義されたコード ロジックが 2 番目の関数定義ステートメントによって上書きされます。したがって、両方の呼び出しで最後の関数ロジックが実行されます。

たとえば、この JavaScript コードを 2 つの部分に分割する場合は、HTML に記述し、

のように