ホームページ > 記事 > ウェブフロントエンド > JavaScriptの基本型と参照型を簡単に分析_基礎知識
JavaScript の型については、次のように簡単に要約できます。強く型付けされた言語と比較すると、弱い (緩やかな) 型付け言語であり、基本型と参照型があり、それらの違いは固定スペースがあることです。スタック メモリでは、不定の領域がヒープ メモリに保存され、実装場所へのポインタがスタック メモリに保存されます。
市販されている多くの本には、それについて語るスペースがたくさんあります。この記事では、JavaScript、特に JavaScript の種類についての基本的な理解を必要とするいくつかの側面について説明します。それでも理解できない場合は、この記事を読む前に JavaScript に関する本を手に取って読んでください。
1. 基本型と参照型
1. 基本型: Unknown/Null/Boolean/Number/String
2. 参照型: Object/Array/Function/Date/RegExp/Error/Map/Set…
なぜ参照型が列挙されていないのでしょうか?少なくともこの記事については、これだけ知っていれば十分だからです。その他はめったに使用されない可能性があり、Map や Set などもすべてのブラウザでサポートされているわけではありません。
2.JavaScriptの種類の判定
JavaScript には型を決定するために使用できる演算子が 2 つあります。これらは typeof と instanceof ですが、その範囲は非常に小さく、うまく混合できず、信頼性が低いことで有名です。正しい場合もありますが、多くの場合は信頼できません。ちょっと見てみると、次のことがわかります:
// 信頼できない場合:
typeof [] // object
typeof null // object
'sofish'instanceof String // false
うーん、おそらく多くの初心者 JavaScript プログラマーはこれのせいで悪口を言うでしょう。 JS を使用する必要がある場合、ほとんどの人はすでに jQuery などのライブラリを持っており、それらは型を簡単に検出できるようにカプセル化されています。もちろん、実際には、「JavaScript ではすべてがオブジェクトである」ということわざがあるため、検出するのはそれほど面倒ではありません。もちろん、多くのドキュメントで言及されているように、未定義は実際には NaN や Infinity のような単なるグローバル プロパティです。おそらくそれはご存知でしょう。しかし、「オブジェクト」が役に立ちます:
この場合、is 関数を使用して型を決定できます。この単純な関数は互換性が高く、プロジェクトで使用できます。例:
3. JavaScript の型変換
JavaScriptでは変数(プロパティ)の型を変更できます。最も一般的なのは、文字列と数値の間の変換です。 1「2」を12に変えるにはどうすればよいですか? JavaScript では算術演算子と文字列ハイフンである演算子を理解する必要があります。したがって、初心者は記号を使用すると、計算が意図したものにならないことがありますが、- 記号を使用すると常に「正しい」答えが得られることがあります。
err = 'sofish';
console.log(err) // 'sofish'
1. プロパティとメソッドを追加します
次のコードでは、基本的に同様の値を割り当てた場合、エラーは報告されませんが、取得時には無効になることがわかります:
var str = 'sofish';
str.hello = 'world';
console.log(str.hello); // 未定義
2. 参照型の値に対する操作
参照型は参照としてスタック メモリに格納されるため、同じ元の値を指す場合、値に対する操作はすべての参照に影響します。ここでは再割り当ての例を示します (値の操作ではありません)。直接操作) は、元の値を変更せずにオブジェクトを再作成します。例:
// 非同一型
sofish = ['not a Fish']; // sofish も同様に変更すると、元の値は変更されません
console.log(arr); // [ 1、2、3、「ハローワールド」]
3. 参照型の値をコピーする
元の値に対する操作はすべての参照に影響しますが、操作中に他の参照に影響を与えずに新しいオブジェクトをコピーする必要がある場合があります。一般に、Date/Function/RegExp... などの特定の操作はほとんどなく、主に項目やプロパティを配列やオブジェクトに追加するような操作です。したがって、理解する必要がある主なことは、Array オブジェクトと Object オブジェクトをコピーする方法です。
3.1 配列のコピー
Array オブジェクトには、インターセプトされた配列を返すスライスメソッドがあり、ES5 ではフィルターなども新しい配列を返すので、このメソッドを使用してコピーできます。
// 新しい配列の操作は元の配列には影響しません
sofish.push('hello world');
console.log(arr) // [1, 2, 3]
sofish.say = function() {};
console.log(obj); // { name: 'sofish' }
3.3 シャドウ/ディープコピー
上記のような操作は、私たちがよくシャロー コピー (シャドウ コピー) と呼ぶものです。ただし、Array と Object は両方とも複数のレイヤー (ディメンション) を持つことができます。このようなコピーでは、可能な値のうち最上位のレイヤーの値のみが考慮されますが、Array と Object は依然として元のオブジェクトを指します。例:sofish[1].bio = 'hackable';
console.log(arr);// [1 、猫: { bio: 'hackable' } ]
// 最初のレイヤーの浅いコピー操作は元の値に影響しませんが、2 番目のレイヤーに影響します
sofish.push('cat'); // [ 1, {bio: 'not a Fish'}]
sofish[1].bio = 'hello world';
console.log(arr) // [1, {bio: 'hello world'}]
sofish = copy(arr, 1);
sofish[1].bio = 'foo or bar';
console.log(arr) ; // [1, {bio: 'hello world'}]