jsの中で忘れがちな基本概念
7580 ワード
javascriptの構成部分
一つの完全なjavascriptは三つの異なる部分から構成されるべきである.コア(ECMAScript)、ドキュメントオブジェクトモデル(DOM)、ブラウザオブジェクトモデル(BOM)ウェブブラウザはECMAScriptが可能なホスト環境の一つを実現するだけである.宿主環境は基本的なECMAScriptの実現を提供するだけでなく、言語の拡張を提供して、言語と環境の間の対話を提供します.
ECMAScript言語は以下の構成を郵送します.文法、タイプ、語句、キーワード、保留字、オペレータ、対象文書オブジェクトモデル(DOM):ウェブページの内容にアクセスして操作する方法とインタフェースブラウザオブジェクトモデル(BOM)を提供して、ブラウザと対話する方法と接続口を提供します.
javascript基本常識
1:javascirptは、大文字と小文字を厳密に区別します.
2:javascript(識別子)命名規則:最初の文字はアルファベット、アンダースコア、ドル記号でなければなりません.他の文字はアルファベット、アンダースコア、ドル記号または数字でもいいです.
3:ECMAScript識別子は、ラクダのピークの大きさで書式を書きます.つまり最初の文字は小文字で、残りの単語の頭文字は大文字です.(ただし、このフォーマットを強要する人はいません)
4:
//単一行コメント/*/これは複数行の注釈*/
5:各文は一番いいのは一つのセミコロンで終わってもいいですが、セミコロンを省略してもいいです.
6:
if(test)alert(test)//有効ですが、間違えやすいので、if(test){alert(test)を使わない方がいいです./推奨します.}
7:var objこのように初期化されていない変数は特殊な値undefinedを保存します.
8:obj=100は有効ですが、推奨されていません.これはグローバル変数を宣言するのに相当します.
9:ECMAScriptは5種類の簡単なデータタイプがあります.Unidefined、Null、Boolean、NumberとStering
1種類の複雑なデータタイプObject
10:typeof操作符
var message='message'typeof message typeof(message)
11:Unidefinedタイプは一つの値しかないです.すなわち特殊なundefinedです.
12:
var messagealert/undefinedalert(age)//新聞を間違えました
13:一番よく表示されている初期化変数は、typeofオペレータがundefined値に戻ると、検出された変数が初期化されていないのではなく、宣言されていることが分かります.
宣言されていない変数はtypeofオペレータで直接undefinedに戻ります.
14値を対応するBoolean値に変換するには、変換関数Boolean()を呼び出すことができます.
15 Numberタイプ:8進字面の1位は必ず0で、16進の字面の2位はOxでなければなりません.
浮動小数点婁はこのようにすることができます.でも、このように使うのはおすすめできません.
浮動小数点の後に数字がなければ、その数値は整数として保存されます.同様に浮動小数点自体が整数(1.0)を表すと、この値も整数に変換されます.
14:Number.MAX_VALE整数の最大値
Number.MIN_VALE整数の最小値
javascript値の範囲を超えた値を計算すると、この値は自動的に特殊なInfinityに変換され、いつか正の値または負のInfinity値を返したら、次の計算に参加できなくなります.
一つの数値が貧しいかどうかを判定するには、isfinite()関数が使えます.
Number.NEGATIVE_を訪問します.INFINITYとNumber.POSITIVE_INFINITYはプラスとマイナスのInfinityの値が得られますので、この二つの属性はそれぞれ-InfinityとInfinityを保存しています.
15 NaNの特徴:1 NaNに関する動作はいずれもNaNに戻ります.2 NaNはどの値にも等しくありません.NaN自身のisNaN()という関数はパラメータを受け入れます.このパラメータはどんな種類でもいいです.この関数はこのパラメータが「数値ではない」かどうかを判断してくれます.
16 parseIntは様々な整数フォーマットが可能です.
Number(789)//変換不能789 YunparseInt(789 Yun);parseInt(「0 xa 313」、16);基数設定があっても、8進数パルプイン(")/////.NaN
パーrseFloatは十進数の値しか解析しないので、二番目のパラメータで基数を指定する用法はありません.
パーrseFloat解析文字列は、この文字列に整数として解析可能な数が含まれている場合(小数点以下、または小数点以下のすべてがゼロ)パーズFlooat()は整数を返します.
parseFloat(「32.32」)
17の二重引用符で表される文字列と単引用符で表される文字列は全く同じで、どの文字列の長さでもlength属性で取得できます.
文字列方法toString()に変換します.数値、ブール値、オブジェクト、文字列にはいくつかの方法がありますが、nullとundefinedの値にはこの方法がありません.
toString()数値呼び出しなら、基数eg:var a=123を伝達することもできます.a.toString(16)
値がnullまたはundefined値であることを知らないときは、変換関数String()を使用してもよく、この関数は任意の種類の値を文字列に変換でき、String()関数は変換規則に従います.1値がtoString()メソッドがある場合は、この方法を呼び出して対応する結果2を返します.値がnullであればnullに戻ります.3値がundefinedであれば、undefinedに戻ります.
18 ECMAScriptの対象は、データと機能のセットです.ECMAScriptでは、構造関数がパラメータを伝達できない場合、後のペアの括弧は省略されます.
次のように
var obj=new Object()var obj=new Object;
19 Objectの各例は以下の属性と方法を持っています.
constructorは、現在のオブジェクトを作成するための関数を保存しています.
hasOwnPropertyは、与えられた属性が現在のオブジェクトインスタンスに存在するかどうかを確認するために使用されます.
isPrototypeOfは、伝来したオブジェクトが別のオブジェクトの原型であるかを確認するために使用されます.
propertyIs Enumerableは、与えられた属性がfor-i文を使用できるかどうかを確認するために使用されます.
20 with文:
with(location){var qs=search.substring(1);var hostName=hostname;var url=href;}
21 switch
var num=25switch(true){case num<0:alert('less than 0');break;case num==0&num==10:alert('between 0 and 10');break;case num>10&num<=20:alert('between 10 and 20 debreak;)
switch文は比較値ではフルオペレータを使用していますので、タイプ変換は発生しません.
22関数の中のreturn文以降のコードはいつまでも実行されません.
return文は戻り値を持たなくてもいいです.この場合、関数は実行停止後にundefined値に戻ります.
23 argmentsオブジェクトのlength属性によって、伝達値がないネーミングパラメータは、自動的にundefined値に与えられます.
24 ECMAScript関数は再ロードされていません.
25は他の言語と違って、ECMAScriptは整数と浮動小数点の数値のためにそれぞれ異なるデータタイプを定義していません.Numerタイプはすべての数値を表すために使用できます.
26 ECMAScriptでは関数の戻り値を指定する必要はありません.ECMAScript関数はいつでも任意の値を返します.
27 ECMAScript関数の関数パラメータは、ゼロまたは複数の値を含む配列の形で伝達されます.
28は、ECMAScript関数に任意の数のパラメータを渡すことができ、argmentsオブジェクトを介してこれらのパラメータにアクセスすることができます.
htmlでjavascriptを使う
スクリプトのプロパティ:
charset:src属性で指定されたコードの文字セットを表します.
defer:スクリプトはドキュメントが完全に解析され、表示された後に実行されます.
スクリプト要素の内部に含まれているjavascriptコードは上から下まで順次解釈されます.
Javascriptコードのどこにも「」という文字列が現れないようにしてください.埋め込みコードを解析するルールに従って、ブラウザが文字列「//script」に出会うと、それは終わりだと思います.
外部javascriptファイルはjs拡張子を持っていますが、この拡張子は必要ではありません.ブラウザはjavascriptを含むファイルの拡張子を確認しません.
src属性を持つ「script」要素は、その「script」タグと「/script」タグの間に追加のjavascriptコードを含むべきではない.
また、「script」要素のsrc属性には、外部ドメインからのjavascriptファイルも含まれています.
ブラウザでは、<スクリプト>要素がページに現れた順に、それらを順次解析します.
通常はすべてのjavascriptをbody元素の中に引用して、ページの内容の後に置きます.
<スクリプト>タグはdefer属性を定義しています.スクリプトはページの構造に影響しないということです.つまり、スクリプトはページ全体にわたって解析が完了してから実行されます.(ただし、現在はIEとFirefox 3.1のみが現在のところ唯一のdefer属性をサポートするメインブラウザです.)
XHTML(Extenseble Hypertext Markp Language)
XHTMLコードを作成するのは編纂よりずっと厳しいです.
CDATAセグメントは、ドキュメント内の特殊な領域であり、この領域には解析不要な任意のフォーマットのテキスト内容が含まれていますので、htmlに表示される小さいサイズにCDATAセグメントを加えてもXHTMLドキュメントで正常に動作します.
以下の通りです
XHTML対応のブラウザでは、この方法は問題を解決することができますが、実際にはXHTMLに対応していないブラウザもたくさんあります.
以下の通りです
要素をサポートしていないブラウザに埋め込まれたjavascriptコードを隠すことができます.このスキームはjavascriptコードを一つのファイルに含めることです.
次のように
実際には、外部ファイルの役割は、埋め込みコードの利点よりも、メンテナンス性とキャッシュ(両方のページが同じ外部ファイルとして機能する場合は、このファイルは一回だけダウンロードしてください)の2つの側面に反映されます.
ドキュメントモード:混雑モードと標準モード
<noscript>要素の内容は、ブラウザでスクリプトやブラウザサポートスクリプトをサポートしていませんが、スクリプトは無効になります.ブラウザはスクリプトをサポートしています.スクリプトを有効にしても、noscript要素の中には何もありません.
eg:
一つの完全なjavascriptは三つの異なる部分から構成されるべきである.コア(ECMAScript)、ドキュメントオブジェクトモデル(DOM)、ブラウザオブジェクトモデル(BOM)ウェブブラウザはECMAScriptが可能なホスト環境の一つを実現するだけである.宿主環境は基本的なECMAScriptの実現を提供するだけでなく、言語の拡張を提供して、言語と環境の間の対話を提供します.
ECMAScript言語は以下の構成を郵送します.文法、タイプ、語句、キーワード、保留字、オペレータ、対象文書オブジェクトモデル(DOM):ウェブページの内容にアクセスして操作する方法とインタフェースブラウザオブジェクトモデル(BOM)を提供して、ブラウザと対話する方法と接続口を提供します.
javascript基本常識
1:javascirptは、大文字と小文字を厳密に区別します.
2:javascript(識別子)命名規則:最初の文字はアルファベット、アンダースコア、ドル記号でなければなりません.他の文字はアルファベット、アンダースコア、ドル記号または数字でもいいです.
3:ECMAScript識別子は、ラクダのピークの大きさで書式を書きます.つまり最初の文字は小文字で、残りの単語の頭文字は大文字です.(ただし、このフォーマットを強要する人はいません)
4:
//単一行コメント/*/これは複数行の注釈*/
5:各文は一番いいのは一つのセミコロンで終わってもいいですが、セミコロンを省略してもいいです.
6:
if(test)alert(test)//有効ですが、間違えやすいので、if(test){alert(test)を使わない方がいいです./推奨します.}
7:var objこのように初期化されていない変数は特殊な値undefinedを保存します.
8:obj=100は有効ですが、推奨されていません.これはグローバル変数を宣言するのに相当します.
9:ECMAScriptは5種類の簡単なデータタイプがあります.Unidefined、Null、Boolean、NumberとStering
1種類の複雑なデータタイプObject
10:typeof操作符
var message='message'typeof message typeof(message)
11:Unidefinedタイプは一つの値しかないです.すなわち特殊なundefinedです.
12:
var messagealert/undefinedalert(age)//新聞を間違えました
13:一番よく表示されている初期化変数は、typeofオペレータがundefined値に戻ると、検出された変数が初期化されていないのではなく、宣言されていることが分かります.
宣言されていない変数はtypeofオペレータで直接undefinedに戻ります.
14値を対応するBoolean値に変換するには、変換関数Boolean()を呼び出すことができます.
15 Numberタイプ:8進字面の1位は必ず0で、16進の字面の2位はOxでなければなりません.
浮動小数点婁はこのようにすることができます.でも、このように使うのはおすすめできません.
浮動小数点の後に数字がなければ、その数値は整数として保存されます.同様に浮動小数点自体が整数(1.0)を表すと、この値も整数に変換されます.
14:Number.MAX_VALE整数の最大値
Number.MIN_VALE整数の最小値
javascript値の範囲を超えた値を計算すると、この値は自動的に特殊なInfinityに変換され、いつか正の値または負のInfinity値を返したら、次の計算に参加できなくなります.
一つの数値が貧しいかどうかを判定するには、isfinite()関数が使えます.
Number.NEGATIVE_を訪問します.INFINITYとNumber.POSITIVE_INFINITYはプラスとマイナスのInfinityの値が得られますので、この二つの属性はそれぞれ-InfinityとInfinityを保存しています.
15 NaNの特徴:1 NaNに関する動作はいずれもNaNに戻ります.2 NaNはどの値にも等しくありません.NaN自身のisNaN()という関数はパラメータを受け入れます.このパラメータはどんな種類でもいいです.この関数はこのパラメータが「数値ではない」かどうかを判断してくれます.
16 parseIntは様々な整数フォーマットが可能です.
Number(789)//変換不能789 YunparseInt(789 Yun);parseInt(「0 xa 313」、16);基数設定があっても、8進数パルプイン(")/////.NaN
パーrseFloatは十進数の値しか解析しないので、二番目のパラメータで基数を指定する用法はありません.
パーrseFloat解析文字列は、この文字列に整数として解析可能な数が含まれている場合(小数点以下、または小数点以下のすべてがゼロ)パーズFlooat()は整数を返します.
parseFloat(「32.32」)
17の二重引用符で表される文字列と単引用符で表される文字列は全く同じで、どの文字列の長さでもlength属性で取得できます.
文字列方法toString()に変換します.数値、ブール値、オブジェクト、文字列にはいくつかの方法がありますが、nullとundefinedの値にはこの方法がありません.
toString()数値呼び出しなら、基数eg:var a=123を伝達することもできます.a.toString(16)
値がnullまたはundefined値であることを知らないときは、変換関数String()を使用してもよく、この関数は任意の種類の値を文字列に変換でき、String()関数は変換規則に従います.1値がtoString()メソッドがある場合は、この方法を呼び出して対応する結果2を返します.値がnullであればnullに戻ります.3値がundefinedであれば、undefinedに戻ります.
18 ECMAScriptの対象は、データと機能のセットです.ECMAScriptでは、構造関数がパラメータを伝達できない場合、後のペアの括弧は省略されます.
次のように
var obj=new Object()var obj=new Object;
19 Objectの各例は以下の属性と方法を持っています.
constructorは、現在のオブジェクトを作成するための関数を保存しています.
hasOwnPropertyは、与えられた属性が現在のオブジェクトインスタンスに存在するかどうかを確認するために使用されます.
isPrototypeOfは、伝来したオブジェクトが別のオブジェクトの原型であるかを確認するために使用されます.
propertyIs Enumerableは、与えられた属性がfor-i文を使用できるかどうかを確認するために使用されます.
20 with文:
with(location){var qs=search.substring(1);var hostName=hostname;var url=href;}
21 switch
var num=25switch(true){case num<0:alert('less than 0');break;case num==0&num==10:alert('between 0 and 10');break;case num>10&num<=20:alert('between 10 and 20 debreak;)
switch文は比較値ではフルオペレータを使用していますので、タイプ変換は発生しません.
22関数の中のreturn文以降のコードはいつまでも実行されません.
return文は戻り値を持たなくてもいいです.この場合、関数は実行停止後にundefined値に戻ります.
23 argmentsオブジェクトのlength属性によって、伝達値がないネーミングパラメータは、自動的にundefined値に与えられます.
24 ECMAScript関数は再ロードされていません.
25は他の言語と違って、ECMAScriptは整数と浮動小数点の数値のためにそれぞれ異なるデータタイプを定義していません.Numerタイプはすべての数値を表すために使用できます.
26 ECMAScriptでは関数の戻り値を指定する必要はありません.ECMAScript関数はいつでも任意の値を返します.
27 ECMAScript関数の関数パラメータは、ゼロまたは複数の値を含む配列の形で伝達されます.
28は、ECMAScript関数に任意の数のパラメータを渡すことができ、argmentsオブジェクトを介してこれらのパラメータにアクセスすることができます.
htmlでjavascriptを使う
スクリプトのプロパティ:
charset:src属性で指定されたコードの文字セットを表します.
defer:スクリプトはドキュメントが完全に解析され、表示された後に実行されます.
スクリプト要素の内部に含まれているjavascriptコードは上から下まで順次解釈されます.
Javascriptコードのどこにも「」という文字列が現れないようにしてください.埋め込みコードを解析するルールに従って、ブラウザが文字列「//script」に出会うと、それは終わりだと思います.
外部javascriptファイルはjs拡張子を持っていますが、この拡張子は必要ではありません.ブラウザはjavascriptを含むファイルの拡張子を確認しません.
src属性を持つ「script」要素は、その「script」タグと「/script」タグの間に追加のjavascriptコードを含むべきではない.
また、「script」要素のsrc属性には、外部ドメインからのjavascriptファイルも含まれています.
ブラウザでは、<スクリプト>要素がページに現れた順に、それらを順次解析します.
通常はすべてのjavascriptをbody元素の中に引用して、ページの内容の後に置きます.
<スクリプト>タグはdefer属性を定義しています.スクリプトはページの構造に影響しないということです.つまり、スクリプトはページ全体にわたって解析が完了してから実行されます.(ただし、現在はIEとFirefox 3.1のみが現在のところ唯一のdefer属性をサポートするメインブラウザです.)
XHTML(Extenseble Hypertext Markp Language)
XHTMLコードを作成するのは編纂よりずっと厳しいです.
CDATAセグメントは、ドキュメント内の特殊な領域であり、この領域には解析不要な任意のフォーマットのテキスト内容が含まれていますので、htmlに表示される小さいサイズにCDATAセグメントを加えてもXHTMLドキュメントで正常に動作します.
以下の通りです
<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
]]>
XHTML対応のブラウザでは、この方法は問題を解決することができますが、実際にはXHTMLに対応していないブラウザもたくさんあります.
以下の通りです
//<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
//]]>
要素をサポートしていないブラウザに埋め込まれたjavascriptコードを隠すことができます.このスキームはjavascriptコードを一つのファイルに含めることです.
次のように
<!--
function sayHi() {
alert('Hi');
}
//-->
実際には、外部ファイルの役割は、埋め込みコードの利点よりも、メンテナンス性とキャッシュ(両方のページが同じ外部ファイルとして機能する場合は、このファイルは一回だけダウンロードしてください)の2つの側面に反映されます.
ドキュメントモード:混雑モードと標準モード
<noscript>要素の内容は、ブラウザでスクリプトやブラウザサポートスクリプトをサポートしていませんが、スクリプトは無効になります.ブラウザはスクリプトをサポートしています.スクリプトを有効にしても、noscript要素の中には何もありません.
eg: