コアJavaScript第1章第1部
12190 ワード
データ型のタイプ
不変性vs可変性
デフォルト値は不変です(既存の値が存在するアドレスの値は変更できません).
参照タイプには可変性があります(既存のアドレスの値を変更できます).
ふへんせい
メモリ
var a = 'abc';
a = a + 'def';
var b = 5;
var c = 5;
b = 7;
メモリには1つの変数領域と1つのデータ領域があり、同じ値であれば異なる変数で作成されたアドレスのデータがリサイクルされ、置き換える場合はその値が存在するデータ領域が検索され、ない場合は新しいデータ領域が作成され、アドレス値が保存されます.
変数領域とデータ領域を区別する理由
ex)各変数に5の500個の変数を割り当てる場合、各空間に5を割り当てる場合、合計8バイト4000バイトが必要であり、入力されたアドレスが2バイト未満の場合、2~500+8の1008バイトしか必要ありません.
重複データの処理効率が向上しました.
可変値(既存の値が存在するアドレスの値を変更できます)
ex)
var obj1 = {
a : 1,
b : 'bbb'
};
obj1.a = 2;
データ領域のa参照のアドレス値が1から2に変更されたことがわかります.(可変)ごみ収集器(GC)
参照カウント0のメモリアドレスは、ゴミ収集器の収集対象となります.
ex)既存の配列が文字列になった場合
変更オブジェクトのproperty(相互影響)
var obj1 = { c:10, d:'ddd'};
var obj2 = obj1;
b = 15;
obj2.c = 20;
オブジェクト自体を変更する場合(相互に分割)
var obj1 = { c:10, d:'ddd'};
var obj2 = obj1;
b = 15;
obj2 = {c : 20, d : 'ddd' };
パラメトリックデータが가변값
の場合、Propertyを変更するときに可変を適用可変の影響
var user = {
name : 'msk',
gender : 'female'
};
var changeName = function (user,newName){
var newUser = user;
newUser.name = newName;
return newUser;
};
var user2 = changeName(user, 'kim');
console.log(user.name,user2.name)
console.log(user === user2);
既存のユーザーのproperty値も変化します.解決策
var user = {
name : 'msk',
gender : 'female'
};
var changeName = function (user,newName){
return {
name : newName,
gender : user.gender
};
};
var user2 = changeName(user, 'kim');
console.log(user.name,user2.name)
console.log(user === user2);
設定を変更して新しいオブジェクトを返します.共通に含まれるプロパティを変更するのではなく、いくつかの値を取得して新しいオブジェクトを作成します.
1つ目の例は来店(user)でお金を受け取って勝手に両替(property変更)2つ目の例は来店してお金を受け取る時だけお金を受け取るので、今は気にしないで、バイバイの感じがしますか?
さらに変更
ハードコーディングの削減(オブジェクトのプロパティ数にかかわらず)
既存のコンテンツのコピー後に必要なローカル値のみ変更
var copyObject = function (target){
var result = {};
for( var prop in target){
result[prop] = target[prop];
}
return result;
};
var user = {
name : 'msk',
gender : 'female'
};
var user2 = copyObject(user);
user2.name = 'Kim';
console.log(user.name, user2.name);
console.log(user === user2);
ソース
コアJavaScript
Reference
この問題について(コアJavaScript第1章第1部), 我々は、より多くの情報をここで見つけました https://velog.io/@khw970421/코어자바스크립트-공부テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol