関数の外側に定義された変数は、グローバル変数でなければなりません。関数内で定義された変数は、varが宣言されている場合、変数はローカル変数です。 VARが宣言されていない場合、変数はグローバル変数です。
1。グローバルおよびローカル変数JavaScript var global = "global"; test(); function test(){var local = "local"; document.writeln(global); document.writeln(local);} document.writeln(global); document.writeln(local);2。2種類のCookie
i)永続的なCookieは、クライアントのハードディスクに保存されます。
ii)返信クッキー:クライアントのハードディスクに保存されませんが、ブラウザプロセスのメモリに配置されます。ブラウザが閉じられると、返信クッキーが破壊されます。
3。JavaScriptでは、関数はオブジェクトです
4。JavaScriptでは、メソッド(関数)の過負荷の概念はありません
5。関数オブジェクト
JavaScriptには関数オブジェクトがあり、すべてのカスタム関数は関数オブジェクトタイプです。関数オブジェクトによって受け入れられるすべてのパラメーターは文字列タイプで、最後のパラメーターは実行する関数本文、前のパラメーターは関数が本当に受け入れる必要があるパラメーターです。
6.暗黙のオブジェクト引数
JavaScriptでは、各関数には暗黙のオブジェクト引数があり、実際に関数に渡されたパラメーターを表します。引数.lengthは、実際に渡されたパラメーターの数を表します。
7。関数名
各関数オブジェクトには長さの属性があり、関数が受け入れると予想されるパラメーターの数を示します。関数の議論とは異なります。 arguments.lengthは、関数によって実際に受け入れられているパラメーターの数を表します。
8。JavaScriptには5つのプリミティブデータ型があります
未定義、ヌル、ブール、数字、および弦。 (注:JavaScriptでは、charデータ型はありません)
未定義のデータ型には、未定義のデータ型には1つの値のみがあります。
nullデータ型には、nullの値は1つだけです。
ブールデータ型には2つの値があります。真とfalse。
9。Typeof演算子
TypeOFは、変数の名前が続く単位オペレーターです。変数のデータ型を取得するために使用されます。その返品値は、未定義、ブール、数字、文字列、およびオブジェクトです。
10。JavaScriptでは、関数が返品値を宣言しない場合、未定義11、null、未定義の関係を返します
未定義は、実際にはnullから派生しています。例えば:
nullと未定義の関係
JavaScript
アラート(未定義== null); //ブラウザはtrueを返します
11。強制型変換
JavaScriptには3つのキャストがあります:Boolean(Value)、Number(Value)、String(Value)。
12。オブジェクトオブジェクト
JavaScriptでは、すべてのオブジェクトがオブジェクトオブジェクトから継承されます。
オブジェクトオブジェクト
JavaScript
var object = new object(); for(var v in object){alert(v);}上記のコードでは、ブラウザには何も印刷されません。これは、オブジェクトオブジェクトが属性を運ばないことを意味するものではありません。次のコードは、オブジェクトオブジェクトのプロパティを列挙できるかどうかをテストします。 falseが返された場合、オブジェクトオブジェクトのプロパティを列挙できないことを意味します。
オブジェクトオブジェクトのプロパティを列挙できません
JavaScript
alert(object.propertyisenumerable( "prototype"));
ブラウザが誤ったダイアログボックスをポップアップする場合、オブジェクトオブジェクトのプロパティを列挙できないことを意味します。
次に、ウィンドウオブジェクトのプロパティを列挙できるかどうかを見てみましょう。
ウィンドウオブジェクトのプロパティは列挙可能です
JavaScript
for(window in windo){console.log(v);}Chromeでは、ブラウザデバッグコンソールに多くのプロパティが印刷されていることがわかり、ウィンドウオブジェクトのプロパティを列挙できることを示します。
13。JavaScriptでは、オブジェクトの属性を動的に追加するか、オブジェクトの属性を動的に削除することができます。
オブジェクトのプロパティを動的に追加/削除します
JavaScript
var object = new object(); alert(object.username); // undefined object.username = "zhangsan"; alert(object.username); // zhangsan object ["password"] = "123"; alert(object.password); // 123 delete object.username;
14。JavaScriptでオブジェクトを定義する最も一般的な方法
オブジェクトを定義する最も一般的な方法
JavaScript
var object = {username: "zhangsan"、password:12345}; alert(object.username); alert(object.password);15。配列
配列定義
JavaScript
// var array = new array(); array.push(1); array.push(2); array.push(3); alert(array.length); //方法2(推奨)var array = [1,25,4]; array.sort(); alert(array);
配列のsort()メソッドを呼び出し、ブラウザは1、25、4を印刷します。これは予想される結果ではありません。
JavaScriptアレイの種類のメソッドの場合、最初にコンテンツを文字列(toString()メソッドと呼ばれる)にソートするコンテンツを変換し、文字列の順にソートします。
次の方法では、予想される結果を取得できます(配列サイズでソート):
配列ソート
JavaScript
関数比較(num1、num2){var temp1 = parseint(num1); var temp2 = parseint(num2); if(temp1 <temp2){return -1; } else if(temp1 == temp2){return 0; } else {return 1; }} var array = [1,25,3]; array.sort(compare); alert(array);次に、匿名関数に実装します。
匿名関数のソート
JavaScript
var array = [1,25,3]; array.sort(function(num1、num2){var temp1 = parseint(num1); var temp2 = parseint(num2); if(temp1 <temp2){return -1;} else if(temp1 == temp2){return 0;} els {return 1;}});アラート(配列);16. JavaScriptでオブジェクトを定義する5つの方法(JavaScriptにクラスの概念はありません、オブジェクトのみ)i)既存のオブジェクトに基づいてそのプロパティとメソッドを拡張する
既存のオブジェクトに基づいてプロパティとメソッドを拡張します
JavaScript
var object = new object(); //名前属性object.name = "zhangsan"; // sayname method object.sayname = function(name){this.name = name; alert(this.name);}; object.sayname( "kyle"); // saynameメソッドを呼び出し、名前属性はkyleに変更され、ブラウザがカイルを印刷します最も簡単な方法は、使用するのに便利ではなく、一時的にオブジェクトを必要とするのに適しています。
ii)工場でオブジェクトを作成します
パラメーターのない工場メソッド:
JavaScript
// Factory Method関数CreateObject(){var object = new object(); // Object object.name = "Zhangsan"; // name属性object.password = "123"; //パスワード属性= function(){// get method alert(this.name+"、"+this. this.sassword); }; return object;このオブジェクトを返します} var object1 = createObject(); // calendar create object object2 = create object(); // create object object2object1.get(); // create object2object1.get(); // object object2.get();パラメーターを備えた工場メソッド:
JavaScript
関数CreateObject(name、password){var object = new object(); object.name = name; object.password = password; object.get = function(){alert(this.name+"、"+this.password); }; return object;} var object1 = create object( "zhangsan"、 "123"); var object2 = create object( "lisi"、 "456"); object1.get(); object2.get();パラメーターのない上記の2つの工場メソッドの欠点とパラメーターを使用してください。
オブジェクトが作成されるたびに、メモリのGETメソッドが作成されます。これはメモリの無駄であり、パフォーマンスに影響します。そして、私たちの期待は、プロパティが異なる2つの異なるオブジェクトを作成することですが、メソッドは共有されます。次に、CreateObject Factoryメソッドを改善する必要があります。
改善された工場アプローチ:
JavaScript
function get(){alert(this.name+"、"+this.password);} function create object(name、password){var object = new object(); object.name = name; object.password = password; object.get = get; return object;} var object1 = create object( "zhangsan"、 "123"); var object2 = create object( "lisi"、 "456"); object1.get(); object2.get();createObject関数の外側のGETメソッドを定義して、作成したオブジェクトごとにGETメソッドが共有されるようにします。関数オブジェクトが関数オブジェクトを持つのではなく、複数のオブジェクトによって関数オブジェクトを共有します。
iii)オブジェクトを作成するコンストラクターメソッド
パラメーターのないコンストラクター:
JavaScript
function person(){//コードの最初の行を実行する前に、JSエンジンは私たちのためのオブジェクトを生成します。 this.password = "123"; this.getInfo = function(){alert(this.name+"、"+this.password); }; //ここには、以前に生成されたオブジェクトを返すための暗黙の返品ステートメントがあります(これは工場法とは別の場所です)} var p1 = new person(); p1.getinfo();パラメーターを備えたコンストラクター
JavaScript
function person(name、password){this.name = name; this.password = password; this.getInfo = function(){alert(this.name+"、"+this.password); };} var p1 = new Person( "Zhangsan"、 "123"); var p2 = new person( "lisi"、 "456"); p1.getinfo(); p2.getinfo();iv)プロトタイプ(プロトタイプ)オブジェクトの作成
プロトタイプはオブジェクトオブジェクト内のプロパティです
プロトタイプ
JavaScript
function person(){} person.prototype.name = "zhangsan"; person.prototype.password = "123"; person.prototype.getinfo = function(){alert(this.name+"、"+this.password);}; var p1 = new person(); var p2 = new person(); p1.name = "kyle"; //オブジェクトが生成されたら、属性p1.getinfo(); p2.getinfo();単にプロトタイプを使用することには2つの問題があります。まず、コンストラクター内の属性に初期値を割り当てることはできません。また、オブジェクトが生成された後にのみ属性値を変更できます。
プロトタイプ
JavaScript
function person(){} person.prototype.name = new array(); person.prototype.password = "123"; person.prototype.getInfo = function(){alert(this.name+"、"+this.password);}; var p1 = new person(); var p2 = new person(); p1.name.push( "zhangsan"); p1.name.push( "lisi"); p1.password = "456"; p1.getinfo(); p2.getinfo()ブラウザが印刷されます:Zhangsan、Lisi、456およびZhangsan、Lisi、123。
オブジェクトがプロトタイプメソッドを使用して作成された場合、生成されたすべてのオブジェクトはプロトタイプのプロパティを共有し、オブジェクトがプロパティを変更すると、他のオブジェクトにも反映されます。したがって、プロトタイプメソッドを単純に使用することはできません。また、他の方法と組み合わせる必要もあります。次に紹介し続けます。
プロトタイプ +コンストラクターを使用して、オブジェクトを定義します
JavaScript
function person(){this.name = new Array(); this.password = "123";} person.prototype.getInfo = function(){alert(this.name+"、"+this.password);}; var p1 = new person(); var p2 = new person(); p1.name.push( "zhangsan"); p2.name.push( "lisi"); p1.getinfo(); p2.getinfo();プロトタイプ +コンストラクターメソッドを使用して、オブジェクトを定義します。オブジェクト間のプロパティは互いに干渉せず、各オブジェクトは同じ方法を共有します。これはより良い方法です。
v)動的プロトタイプメソッド
JavaScript
function person(){this.name = "zhangsan"; this.password = "123"; if(typeof person.flag == "undefined"){alert( "invoked"); person.prototype.getInfo = function(){alert(this.name + "、" + this.password); } person.flag = true; }} var p1 = new person(); var p2 = new person(); p1.getinfo(); p2.getinfo();動的プロトタイプ法では、コンストラクターでは、すべてのオブジェクトがフラグの量を通じてメソッドを共有し、各オブジェクトには独自の属性があります。上記のコードが初めてオブジェクトを作成すると、最初に判断ステートメントを使用して、フラグ属性が定義されているかどうかを確認します。定義されていない場合は、プロトタイプを介してgetInfoメソッドを追加してから、フラグをtrueに設定します。次に、オブジェクトが2度目に作成されると、IFステートメントが虚偽であると判断され、実行されます。これにより、目的の結果が達成され、作成されたオブジェクトプロパティは互いに干渉しません。オブジェクトメソッドは共有されます。
17。JavaScriptのオブジェクトの継承(5つの方法)
最初の方法:オブジェクトのなりすまし
オブジェクトの継承を模倣します
JavaScript
// class class function parent(username){this.username = username; this.sayhello = function(){alert(this.username); };} //サブクラス関数child(username、password){//次の3行のコードが最も重要です。 this.method(username); this.methodを削除します。 this.password = password; this.sayworld = function(){alert(this.password); };} var p = new Parent( "Zhangsan"); var c = new Child( "lisi"、 "123"); p.sayhello(); c.sayhello(); c.sayworld()2番目の方法:call()
2番目の実装継承方法、呼び出しメソッド、コールメソッドは、関数オブジェクトで定義されているメソッドであるため、定義する各関数にはこの方法があります。コールメソッドの最初のパラメーターは、2番目のパラメーターから開始する関数でこれに渡され、関数のパラメーターに1つずつ割り当てられます。
コールは親クラスを継承します
JavaScript
function test(str){alert(this.name+"、"+str);} var object = new object(); object.name = "zhangsan"; // test.callはテスト関数test.call(object、 "html5war"); //オブジェクトをこれに割り当てます。次に、コールメソッドを使用してオブジェクト継承を実装します
JavaScript
// class class function parent(username){this.username = username; this.sayhello = function(){alert(this.username); };} //サブクラス関数child(username、password){parent.call(this、username); this.password = password; this.sayworld = function(){alert(this.password); };} var p = new Parent( "Zhangsan"); var c = new Child( "lisi"、 "123"); p.sayhello(); c.sayhello(); c.sayworld();3番目の方法:apply()
適用して、親クラスを継承します
JavaScript
// class class function parent(username){this.username = username; this.sayhello = function(){alert(this.username); };} //サブクラス関数child(username、password){parent.apply(this、new Array(username)); this.password = password; this.sayworld = function(){alert(this.password); };} var p = new Parent( "Zhangsan"); var c = new Child( "lisi"、 "123"); p.sayhello(); c.sayhello(); c.sayworld();Applyメソッドは、コールメソッドに非常に似ています。適用方法は関数オブジェクトで定義されているメソッドでもあるため、定義する各関数にはこの方法があります。
適用方法とコールメソッドには違いがあります。渡された2番目のパラメーターは配列であり、コールメソッドはいくつかの個別のデータパラメーターを渡しました。これらの2つの方法は良いと悪いとは言えません。特定の使用シナリオに依存します。
4番目の方法:プロトタイプチェーンメソッド(コンストラクターにパラメーターを渡すことはできません)
プロトタイプチェーンの継承
JavaScript
function parent(){} parent.prototype.hello = "hello"; parent.prototype.sayhello = function(){alert(this.hello);}; function child(){} child.prototype = new Parent(); child.prototype.world = "world"; child.prototype.sayworld = function(){alert(this.world);}; var c = new Child(); c.sayhello(); c.sayworld();単にプロトタイプチェーン法を使用することの欠点:パラメーターを渡す方法はありません。オブジェクトが作成されるまで、変更する前にのみ待つことができます。この問題を他の方法と組み合わせて解決しましょう。
5番目の方法:混合方法(推奨)
ハイブリッドメソッドを使用して、オブジェクト継承を実装します
JavaScript
function parent(hello){this.hello = hello;} parent.prototype.sayhello = function(){alert(this.hello);} function child(hello、world){parent.call(this、hello); this.world = world;} child.prototype = new parent(); child.prototype.sayworld = function(){alert(this.world);} var c = new child( "hello"、 "world"); c.sayworld(); c.sayworld();基本的なJavaScriptの知識ポイント(推奨)の上記の要約は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。