1.データ型
27288 ワード
1-1データ型
✔¥ベーシック(オリジナル、オリジナル)¥値のダイレクトコピー
const num = 33;
const infinity = 1 / 0; // Infinity
const negativeinfinity = -1 / 0; // -Infinity
const nAn = Number("hi"); // NaN
console.log(typeof num); // "number"
console.log(typeof infinity); // "number"
console.log(typeof negativeinfinity); // "number"
console.log(typeof nAn); // "number"
const str1 = "문자열";
const str2 = 'string';
const str3 = str1 + str2 + 3; // "문자열string3"
console.log(typeof str1); // "string"
console.log(typeof str2); // "string"
console.log(typeof str3); // "string"
//falsy값 제외하고 전부 truthy이므로 falsy를 기억하자
0, -0, "", '', NaN, null, undefined, false
パッキンオブジェクトを提供し、元のデータをオブジェクトと見なすことができます.
1-2データ型の背景知識
1-2-1メモリとデータ
bit:2個の値(0または1)、byte:2**8個の値
JavaScriptメモリの管理
C、javaなどの静的タイプの言語では、データ型に応じて異なるメモリ領域が割り当てられます.
たとえば、数値は範囲によって異なり、変数を宣言するときにデータ型を指定する必要があります.
動的言語JavaScriptは、メモリオーバーフロー値(=バイト単位の識別子)によってデータを区切って接続します.
JavaScriptは、8バイト(64ビット)の数字を確保します.
1-2-2識別子と変数
✔¥変数?可変データを格納できるスペース
✔勘定科目識別子?このスペースの名前=変数名
1~3変数宣言とデータ割当て
1-3-1変数宣言
var a; // 변수 선언
console.log(a); // undefined
1-3-2データ割付
var a; // 변수 선언
a = "Hi"; // 변수 a에 데이터 할당
**3. データ領域の空白に文字列「Hi」を格納します.
1-4基本データおよび参照データ
1-4-1不変値
✔¥不変性?データ領域メモリの変更可能性
АААААААААААА
let a = 5; //a는 5라는 데이터를 담는 '식별자'
a = 7; // 값이 5에서 7로 바뀌는 것이 아니라 식별자 a가 데이터 5의 주소가 아닌 7의 주소를 담게 됨
//5와 7 데이터는 변하지 않음 =>"immutable"
1-4-2可変
ААААААААААААА
const obj = {
a: 32,
b: 'male'
} // object인 객체는 또 다른 데이터의 주소값을 참조
1-4-3レプリケーション変数の比較
// 변수 복사 후 객체의 프로퍼티를 변경 => "참조형 데이터가 가변값"
let a = "Hi";
let obj = {
age: 32,
gender: "male"
};
let b = a;
let obj2 = obj1;
b = "Hello";
obj2.age = 33;
// 변수 복사 후 객체 자체를 변경
let a = "Hi";
let obj = {
age: 32,
gender: "male"
};
let b = a;
let obj2 = obj1;
b = "Hello";
obj2 = {
age: 33,
gender:"male"
}
1-5オブジェクトを変更しない
1~5-1の不変オブジェクトを作成する簡単な方法
АААААААААААААА
1-5-2浅い放射と深い放射
✔¥浅い放射線?次のステップに近い値のみコピー
✔¥深い放射線?すべての内部値をすべてコピー=>元の値から完全に参照解除されたオブジェクト
オブジェクト構成の値がデフォルトの場合はそのままコピーし、参照データが内部構成の場合はそのままコピーします.
let one = { name: "one" };
const two = { name: "two" };
const something = one;
one = { name: "ONE" };
console.log(something); // { name: "one" };
//객체의 깊은 복사
let copyObj = function(target) {
var result = {};
if (typeof target === "object" && target !== null) {
for(var prop in target) {
result[prop] = copyObj(target[prop]);
}
} else {
result = target;
}
return result;
};
1-6未定義およびnull
АААААА
✔️ undefined? 予期せぬ値が存在しない場合、JavaScriptエンジンによって自動的に付与されます(直接割り当ては避けます)
✔️ null? ユーザーは「値なし」を明示します.
let nullData = null;
console.log(typeof nullData); // object => js 버그
//동등 연산자 사용
console.log(nullData == null); //true
console.log(nullData == undefined); // true
//일치 연산자 사용
console.log(nullData === null); //true
console.log(nullData === undefined); // false
//동등연산자 아닌 일치연산자(===) 사용할 것
// 초기값이 할당되지 않은 변수
let a;
console.log(a); // undefined
// 초기값이 할당되지 않은 매개변수
function foo (a, b) {
console.log(a); // 1
console.log(b); // undefined
}
foo(1);
// return문이 없거나 호출되지 않은 함수의 실행 결과
function foo (a, b) {
let result = a + b;
}
console.log(foo(1, 2)); // undefined
// 객체에서 존재하지 않는 속성을 접근하는 경우
const student = {
name: 'jihyun'
};
console.log(student.age); // undefined
var, let, const
✔¥varとlet
let Block Scope:カッコ{}に基づいて役割ドメイン(for loop対応)
letを使用して宣言されたグローバル変数は、定義されていない
var x = "global";
let y = "global";
console.log(window.x); // "global"
console.log(window.y); // undefined
var宣言を使用した変数をundefinedに初期化して開始
let宣言を使用した変数は、宣言実行前に初期値Xである
初期値が指定されていないlet変数はアクセスできません:temporal dead zone (TDZ)
/* hoisting? 변수 선언문이 해당 scope 내에서 최상위로 끌어올려지는 것
변수 선언문이 실행되기 전에 undefined로 초기화(실제로 실행되는 것은 아님) */
console.log(a); // undefined
var a; // 변수선언 + 초기화
console.log(a); // undefined
a = 20; // 할당
console.log(a); // 20
console.log(a) // ReferenceError
let a; // 변수선언 + 초기화 => 실제 실행 => let변수 접근 가능해짐
console.log(a); // undefined
a = 20; // 할당
console.log(a); // 20
{
// This is the temporal dead zone for the age variable!
// This is the temporal dead zone for the age variable!
// This is the temporal dead zone for the age variable!
// This is the temporal dead zone for the age variable!
let age = 25; // Whew, we got there! No more TDZ
console.log(age);
}
let과 const의 TDZ? scope의 시작점부터 선언(+초기화) 전까지
해당 선언문이 실행되기 전까지 초기값이 정해지지 않음
```
✔️ const
- Block Scope: 중괄호{ }를 기준으로 scope 생성
- '='를 사용한 재할당 불가능
```javascript
const obj = {
arr: [1,2,3]
}
obj = []; // X
obj.arr.length = 0; // arr: []
obj.arr.push(1); // arr: [1]
デフォルトではconstを使用し、let(varはX)を再割り当てする必要がある場合はReference
この問題について(1.データ型), 我々は、より多くの情報をここで見つけました https://velog.io/@jhyunk218/01.데이터타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol