前に書いてください
今日は、ノードタイプの知識と、どのような知識を要約したいかをチェックしたいと思います。 Googleで記事を見ましたが、元のリンクはなくなりました。この記事をスナップショットで引き出しました。元の著者に質問がある場合は、私に連絡してください!
この記事はすべていくつかのJSに基づいており、専門家は自動的にスキップします!私は以前にJSについてあまり書いたことがありませんが、この側面は比較的弱いので、ノードを書くときにトラブルにも遭遇しました。これが私の知識の補足です!
文章
node.jsの基礎は、スクリプト言語であるJavaScriptです。ほとんどのスクリプト言語の一般的な機能の1つは、「弱いタイプ」です。
PHPとは異なり、たとえPHPに新しい変数がある場合でも、それらを宣言する必要はありませんが、JavaScriptはそれらを宣言するためにまだVARが必要です。このVARは、C ++、さらには機能のすべてのタイプの意味をカバーしています。
この記事と次の記事のすべてのコンテンツは、LinuxまたはCygwinのVIMを使用して編集されています(そうでない場合は、独自の方法に変換してください)。次に、コマンドラインの下で結果を表示します。
基本的な構文
変数宣言
C/C ++では、次のような変数を宣言します。
`` c ++
コードコピーは次のとおりです。
void foo(){}
int a = 0;
char b = 'a';
フロートC = 1.0F;
void(*d)()= foo; /// <それが私が書いたものであるかどうかを忘れました、要するに、それは関数ポインターです
node.jsでは次のようになります。
「JavaScript
コードコピーは次のとおりです。
functionfoo(){}
var a = 0;
var b = 'a';
var c = 1.0;
var d = foo;
したがって、どのような種類の変数であっても、node.jsのvarで解決されます。
ループステートメント
のために…私
このループステートメントは基本的にc/c ++と同じです。
`` c ++
コードコピーは次のとおりです。
for(int i = 0; i <foo; i ++)
{
// ...
}
そして、node.jsは弱いタイプであるため、必要なだけです。
「JavaScript
コードコピーは次のとおりです。
for(var i = 0; i <foo; i ++){
// ...
}
for…in
これは、PHPのforeachと同様のポスト型ループステートメントです。
たとえば、次のようにJSONオブジェクトがあります。
JavaScript
コードコピーは次のとおりです。
var foo = {
"こんにちは世界"、
「ノード」:「JS」、
「blahblah」:「bar」
};
この時点で、私たちは... in to loopを使用することができます。
JavaScript
コードコピーは次のとおりです。
for(fooのvarキー){
console.log(key + ":" + foo [key]);
}
コマンドラインに次のコマンドを入力した場合:
コードコピーは次のとおりです。
$ node foo.js
次のコンテンツが画面に表示されます。
コードコピーは次のとおりです。
こんにちは
: 世界
ノード:JS
Blahblah:バー
ヒント:上記から、for ...ステートメントは、キーと価値のトラバーサルを提供することなく、JSONオブジェクト、配列、およびオブジェクトのキー名を横断するために使用されます。キー値を取得したい場合は、foo [<current key name>]の形でのみ取得できます。これはまだPHP Foreachとは少し異なります。
一方、やる、やる…
私はこれをあまり説明しません、それは他の言語との大きな違いではありません。変数宣言がある場合、それはVARを使用するのに十分なものです。
オペレーター
+、 - 、 *、 /
これは、これらのオペレーターの場合であり、 +に注意を払う必要があります。文字列と数値操作の両方に作用できます。弱いタイプの言語では、タイプは弱いと言いますが、数字は文字列の形で表示される場合があり、文字列は数値の形で表示される場合がありますが、必要に応じて、それがどんなタイプであるかについて話す必要があります。次のコードを使用して結果を確認できます。
コードコピーは次のとおりです。
var a = "1";
var b = 2;
console.log(a + b);
console.log(parseint(a) + b);
ここでは、parseintはnode.jsの組み込み関数であり、文字列をタイプintの変数に解析するために使用されます。
上記のコード実行結果は次のとおりです。
コードコピーは次のとおりです。
12
3
注:最初のConsole.logの結果は12です。Aは文字列であるため、Bはシステムによって文字列として追加されます。その結果、2つの文字列が接着されて12になります。2番目のコンソールの結果は3です。最初のAをINTタイプに変換し、2つのINTタイプ変数、つまり値を追加し、もちろん、結果は3です。
==、==、!=、!==
この論理演算子の長さが2(==、!=)の場合、外部値が同じかどうかを決定するが、タイプを決定しないことを説明するポイントです。のように
コードコピーは次のとおりです。
var a = 1、b = "1";
console.log(a == b);
その出力の結果は真です。しかし、真ん中で判断を下すときに等しいサインを追加すると、厳格な判断を下します。タイプと値が同じ場合にのみ当てはまります。そうしないと、偽りになります。つまり、
コードコピーは次のとおりです。
var a = 1、b = "1";
console.log(a === b);
Aはintタイプで、bは文字列であるため、結果はfalseです。
ちなみに、条件付き声明について話しましょう。実際、ここで他の言語と違いがない場合、それはいくつかの論理演算子に対して2つの等しい兆候と3つの等しい兆候の問題にすぎません。だから私はあまり疲れる声明を出しません。
typeof
ここでは、機能ではなくオペレーターと見なします。
この演算子の機能は、変数のタイプを判断することであり、文字列、つまりタイプ名を返します。次のコードを実行するかどうかがわかります。
コードコピーは次のとおりです。
functionfoo(){}
var a = 0;
var b = 'shh〜卵の花のスープは眠っています。 ';
var c = 1.0;
var d = foo;
var e = {"a":a};
var f = [1、2、3];
var g = null;
var h =未定義;
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
console.log(typeof f);
console.log(typeof g);
console.log(typeof h);
ここでの実行の結果は次のとおりです。
コードコピーは次のとおりです。
番号
弦
番号
関数
物体
物体
物体
未定義
ヌル、未定義、ナン
JavaScriptには、タイトルに示すように、3つの特別な値があります。誰もが最初のものに精通しているかもしれません。 C/C ++もありますが、それは大文字であり、その本質は1つです。
`` c ++
NULL 0を定義します
JavaScriptでは、これらの3つの値の意味は異なります。
### null ###
Nullは特別なオブジェクトであり、おおよそ空です。例えば:
var a = null;
誰もがそれを理解できるので、私はそれを説明しません。ただし、C/C ++とは異なり、このヌルは0に等しくありません。
### 未定義 ###
これが意味するのは、この変数が宣言されていないということです。 NULLをよりよく区別するために、サンプルコードは次のとおりです。
「JavaScript
コードコピーは次のとおりです。
var a = {
「フー」:ヌル
};
console.log(a ["foo"]);
console.log(a ["bar"]);
上記のコードでは、["foo"]の値を空、つまりnullにします。そして、それはまったく宣言されていません、それは空にさえありません。誰もが出力の結果を推測する必要がありました。
コードコピーは次のとおりです。
ヌル
未定義
ナン
これは空の値であり、特別な数字です。そのフルネームは番号ではありません。少し奇妙です。数値形式ではない数字の変数、またはエラーのある数値タイプ変数として理解できます。
多くの場合、フローティングポイント数値操作エラー(0で割るなど)、またはユーザーでさえ、NANと等しい変数を自分で等しくすることができ、エラー値を返すことができます。
小さなその他
他の残りのステートメントは、Break、Switch、Continingなど、他の既存の言語に似ています。
可変タイプ
このセクションでは、主にJavaScriptオブジェクトについて説明しており、他のタイプはほぼ同じです。
基本タイプ
node.jsに含まれる基本的なタイプは、ほぼ次のとおりです。
番号
弦
ブール
配列
最初の3つのタイプを直接割り当てることができ、配列の割り当ては単なる参照割り当てです。新しい変数で特定の値が変更されると、古い変数の値も変更されます。次のコードを直接試すことができます。
JavaScript
var foo = [1、2、3];
var bar = foo;
bar [0] = 3;
console.log(foo);
結果:
JavaScript
[3、2、3]
言い換えれば、配列が新しい配列にコピーされた場合、値を直接割り当てるために使用することはできませんが、「深くコピーされる」必要があります。
ここでは、配列を作成する3つの方法について話す必要があります。
最初のタイプ:
JavaScript
コードコピーは次のとおりです。
var dog = new Array();
dog [0] = "shh〜";
犬[1] = "卵の花のスープ";
犬[2] =「睡眠」;
2番目のタイプ:
JavaScript
コードコピーは次のとおりです。
var dog = new Array( "shh〜"、 "egg Flower Soup"、 "Sleeping");
4番目のタイプ:
JavaScript
コードコピーは次のとおりです。
var dog = [
「shh〜」、
「卵の花のスープ」、
「眠っている」
];
私は個人的には、比較的簡潔な3番目の執筆方法を好みます。
JSONオブジェクト
ここでは、JavaScriptオブジェクトとして分類する代わりに、JSONオブジェクトを個別に取り出します。私が少し誤解を招くと思われる場合は、このセクションを直接スキップできます。
JSONオブジェクトとJavaScriptオブジェクトの違いは、クラスのインスタンス化ではなく、データのみを保存するために使用されるかどうかです。実際、JSONの本質はJavaScriptオブジェクト表記です。
JSONの詳細については、Encyclopedia Yourselfにお願いします。
node.jsでJSONオブジェクトを宣言することは非常に簡単です:
JavaScript
コードコピーは次のとおりです。
var dog = {
"pre": "shh〜"、
"sub":{
「名前」:「卵の花のスープ」、
「ACT」:「睡眠」、
「時間」:12
}、
「suf」:[「私は言った」、「眠っている」、「眠っている」]]
};
JSONオブジェクトに特定のキー名のキー値を取得するには、2つの方法があります。 1つ目はドットに接続することであり、2つ目はブラケットを使用することです。
JavaScript
コードコピーは次のとおりです。
犬
.pre;
犬["pre"];
注:上記のドットを使用する場合、JSONのキーが直接追跡されます。キーを変数として扱う場合、犬[key]でのみ試してみることができます。これで、自分で試して、上記のJSONオブジェクトを横断するために使用できます。 Typeof〜を使用することを忘れないでください
クラス(オブジェクト)の基礎
厳密に言えば、node.jsのクラスはクラスと見なすことはできません。実際、それは単なる関数のコレクションであり、いくつかのメンバー変数を追加します。その本質は実際には関数です。
ただし、常識のために、次に「クラス」と呼び、インスタンス化されたものは「オブジェクト」と呼ばれます。
クラスには多くの機能があるか、その本質が関数であるため、注意しない場合は関数の基本について話すことがあります。
クラスの宣言とインスタンス化
クラスを宣言するのは非常に簡単です、笑わないでください:
JavaScript
function foo(){
// ...
}
わかりました、Fooクラスを書きました。
真または偽物? !本物。
信じられない?信じられない場合は、コードを入力して読むことができます。
JavaScript
var bar = new foo();
そのような形式(新しい)で書かれている場合は、このクラスのインスタンス化である場合、関数として見ないでください。
そして、このいわゆるfoo()は、実際にはこのfoo()クラスのコンストラクターです。
メンバー変数
メンバー変数を取得するには、2つの良い方法があります。
1つ目は、これを使用することです。<変数名>クラスコンストラクターまたは任意のコンストラクターで。メンバー変数をいつでも宣言できますが、外部の使用には影響しません。とにかく、宣言されていないときに使用しても、それをサポートする未定義があります。これが最初の方法です:
コードコピーは次のとおりです。
JavaScript
function foo(){
this.hello = "world";
}
注:これは、これが追加された場合にのみ、呼び出しクラスのメンバー変数です。それ以外の場合は、関数のローカル変数にすぎません。この変数のアクション範囲があるかどうかを区別する必要があります。
2番目の方法は、コンストラクターまたはメンバー関数の外でそれを宣言することであり、その形式は<クラス名> .prototype。<変数名>:
JavaScript
コードコピーは次のとおりです。
function foo(){
// ...
}
foo.prototype.hello = "world";
上記の方法のどれがメンバー変数の宣言であっても、次の効果を見ることができます。
JavaScript
コードコピーは次のとおりです。
var bar = new foo();
console.log(bar.hello);
このようなこのクラスを変更することもできます。
JavaScript
コードコピーは次のとおりです。
function foo(){
this.hello = "world";
}
foo.prototype.hello = "卵の花のスープ";
次に、上記のコードを使用して出力します。
卵スープの代わりに出力が世界である理由を考えてください。
コンストラクタ
前に、foo()は実際にはコンストラクターであると言いました。その後、明らかにパラメーターをコンストラクターに渡すことができるため、次のコードがあります。
JavaScript
コードコピーは次のとおりです。
//コード2.1
function foo(hello){
if(hello === undefined){
this.hello = "world";
} それ以外 {
this.hello = hello;
}
}
(hello ===未定義)の場合、奇妙な判断が見られます。この判断の使用は何ですか?最初の可能性は、開発者が特別に痛みの未定義を送ったことです。現時点では、未定義です。
別の状況があります。私たちは最初から、JavaScriptは弱い型言語であると言いました。実際、それは単なる弱いタイプではありませんが、その透過パラメーターも非常に不快です。多かれ少なかれ渡すことができます(多かれ少なかれ渡されたときにプログラムがエラーを犯さないことを確認する限り)、原則として問題ありません。複数のパスのパラメーターは自動的に無視されますが、少数のパスのパラメーターは未定義で補完されます。
次のコードを見るだけで、あなたは理解するでしょう:
JavaScript
コードコピーは次のとおりです。
//コード2.1を接続します
var bar1 = new foo();
var bar2 = new foo( "卵の花のスープ");
自分で2 barのハロー変数を出力してください。1つは世界であり、もう1つは卵スープであることがわかります。明らかに、最初のbar1が宣言されたとき、それは自動的にnode.jsと見なされました:
JavaScript
コードコピーは次のとおりです。
var bar1 = new foo(未定義);
ですから、それは世界であるということわざがあります。
また、このコンストラクターでは、渡されたパラメーターがhelloであることがわかります。このクラスには、this.helloであるメンバー変数があります。ただし、これがある場合、スコープは異なると述べました。これはそうではありません。そのパラメーターはコンストラクターでのみ使用されますが、これを持つパラメーターはメンバー変数です。これを使用してすぐに区別するため、同じ名前が関係しても問題ではありません。
メンバー関数
メンバー関数宣言
メンバー関数の宣言は、メンバー変数の2番目の宣言方法、つまり<class name> .prototype。<function name> = <function>;
JavaScript
コードコピーは次のとおりです。
//コード2.1を接続します
関数sethello(hello){
this.hello = hello;
}
foo.prototype.sethello = sethello;
bar1.sethello( "Egg Cake");
上記のコードが明らかなように、Foo.helloの値を変更できるFooクラスのSethello関数を実装します。
しかし、このように書くのは少し面倒ではありませんか?次に、JavaScript関数の重要な機能について説明します。
★匿名関数★
多くの場合、私たちの関数の一部は1つの場所でのみ参照または呼び出されているため、この関数に名前を付けるのは価値があり、必要はありません。そのため、この関数を一時的に書いて、それを参照する人にそれを参照するように直接尋ねることができます。したがって、関数は次のような関数名を省略できます。
JavaScript
コードコピーは次のとおりです。
function(hello){
this.hello = hello;
}
それを引用または呼び出す方法については?上記のクラスを引用する必要がある場合、それは次のように書かれています:
JavaScript
コードコピーは次のとおりです。
foo.prototype.sethello = function(hello){
this.hello = hello;
}
この書き込み方法は、メンバー関数宣言と同じであり、多くのコードを保存します。実際、基本的には、クラスメンバー関数の宣言は、この匿名関数の方法で宣言されています。
匿名関数をどのように呼び出すかについては?これは通常、特定の関数によってのみ呼び出される関数を渡すときにこのように書かれています。
たとえば、関数のプロトタイプがあります。
JavaScript
コードコピーは次のとおりです。
/**
* 2つの変数aとbを渡します。
* a+bの値を計算した後、それをfunc(num)に引き渡す
*出力に移動します
*/
関数sumab(a、b、func){
var c = a + b;
func(a、b、c);
}
たとえば、出力関数の2つのバージョンがあります。1つは中国の出力、もう1つは英語の出力です。したがって、匿名関数を使用しない場合:
JavaScript
コードコピーは次のとおりです。
関数Zh(a、b、sum){
console.log(a + " +" + b + "の値は:" + sum);
}
関数en(a、b、sum){
console.log(a + "plus" + b + "は" + sum);
}
スマブ(1、2、Zh);
Sumab(3、4、en);
このコードを1回実行すると、出力は次のとおりです。
1 + 2の値は次のとおりです
3プラス4は7です
そのようなコードが匿名関数の形である場合、それは次のとおりです。
JavaScript
コードコピーは次のとおりです。
Sumab(1、2、function(a、b、sum){
console.log(a + " +" + b + "の値は:" + sum);
});
Sumab(3、4、function(a、b、sum){
console.log(a + "plus" + b + "は" + sum);
});
このフォームは通常、コールバック関数で使用されます。コールバックメカニズムは、node.jsまたはjavascriptの本質です。将来の章で紹介します。
メンバー関数宣言で匿名関数を宣言する方法
前のセクションでそれについて話しましたが、もう一度話します。
通常、クラスのメンバー関数を宣言すると、匿名関数を使用してそれを宣言します。
JavaScript
コードコピーは次のとおりです。
//コード2.1を接続します
foo.prototype.sethello = function(hello){
this.hello = hello;
}
このようにして、Fooクラスに関数Sethelloがあります。
2.3.4。クラス任意
これはまた私のナンセンスです。クラスのいわゆるランダム性は、JavaScriptではどこでもクラスを変更できることを意味します。これにはRubyと特定の類似点があります。
たとえば、文字列は実際にはクラスであり、長さなどのメンバー変数、およびIndexOFやSubstrなどのメンバー関数があります。しかし、この文字列の一部が完璧ではなく、独自の方法を追加したいと思う場合は、次のような機能を必要な場所に追加できます。
JavaScript
コードコピーは次のとおりです。
string.prototype.sb = function(){
var shuldstr = "";
for(var i = 0; i <this.length; i ++){
if(i%2 === 0)newsr += "s";
else newsr += "b";
}
newsrを返します。
};
この関数の意味は、文字列を埋めてSBの化身にすることです。
テストしましょう:
コードコピーは次のとおりです。
var str = "shh〜卵の花のスープは眠っています。";
console.log(str.sb());
次の結果が得られます。
sbsbsbsbsbsbs
「shhh〜卵の花のスープが眠っている」と言うなら。あなたのコンピュータは、4回半馬鹿になったことであなたをoldります。 (すぐに粉砕)
3。添付
3.1。ディープコピー
いわゆるディープコピーは、自分で新しい配列またはオブジェクトを作成し、ソース配列またはオブジェクトへの参照を取得するだけでなく、ソース配列またはオブジェクトの基本型変数値を1つずつコピーすることです。したがって、これには再帰的な電話か何かが含まれます。
以下は、私が実装した深いコピー関数です。独自の1つを書いて、自分のnode.jsナレッジベースに追加できます。
JavaScript
コードコピーは次のとおりです。
function cloneObject(src){
var dest = {};
for(srcのvarキー){
if(typeof src === "object")dest [key] = cloneObject(src [key]);
else dest [key] = src [key];
}
DESTを返す;
}