λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

 

GitHub - yjs03057/33-js-concepts: λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…

λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžκ°€ μ•Œμ•„μ•Ό ν•˜λŠ” 33가지 κ°œλ…. Contribute to yjs03057/33-js-concepts development by creating an account on GitHub.

github.com

μ›μ‹œμžλ£Œν˜•(Primitive Types)

Javascriptμ—μ„œ μ›μ‹œμžλ£Œν˜•(Primitive)μ΄λž€ 객체가 μ•„λ‹ˆλ©΄μ„œ λ©”μ„œλ“œλ„ 가지지 μ•ŠλŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.
λŒ€λΆ€λΆ„μ˜ 경우, μ›μ‹œ 값은 μ–Έμ–΄ κ΅¬ν˜„μ²΄μ˜ κ°€μž₯ μ €κΈ‰ν•œ(Low Level) λ‹¨κ³„μ—μ„œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
λͺ¨λ“  μ›μ‹œ 값은 λΆˆλ³€ν•˜μ—¬ λ³€ν˜•ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
μ›μ‹œ κ°’ μžμ²΄μ™€, μ›μ‹œ 값을 ν• λ‹Ήν•œ λ³€μˆ˜λ₯Ό ν˜Όλ™ν•˜μ§€ μ•ŠλŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.
λ³€μˆ˜λŠ” μƒˆλ‘œμš΄ 값을 λ‹€μ‹œ ν• λ‹Ήν•  수 μžˆμ§€λ§Œ, 이미 μƒμ„±ν•œ μ›μ‹œ 값은 객체, λ°°μ—΄, ν•¨μˆ˜μ™€λŠ” 달리 λ³€ν˜•ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

<예제 1>
λ‹€μŒ μ˜ˆμ œλŠ” μ›μ‹œ 값이 λΆˆλ³€ν•¨μ„ 이해할 λ•Œ 도움이 λ©λ‹ˆλ‹€.

// λ¬Έμžμ—΄ λ©”μ„œλ“œλŠ” λ¬Έμžμ—΄μ„ λ³€ν˜•ν•˜μ§€ μ•ŠμŒ
var bar = "baz";
console.log(bar); // baz
bar.toUpperCase();
console.log(bar); // baz

// λ°°μ—΄ λ©”μ†Œλ“œλŠ” 배열을 λ³€ν˜•ν•¨
var foo = [];
console.log(foo); // []
foo.push("plugh");
console.log(foo); // ["plugh"]

// 할당은 μ›μ‹œ 값에 μƒˆλ‘œμš΄ 값을 λΆ€μ—¬ (λ³€ν˜•μ΄ μ•„λ‹˜)
bar = bar.toUpperCase(); // BAZ
Copy to Clipboard
μ›μ‹œ 값을 ꡐ체할 μˆ˜λŠ” μžˆμ§€λ§Œ, 직접 λ³€ν˜•ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

<예제 2>

// μ›μ‹œ κ°’
let foo = 5;

// μ›μ‹œ 값을 λ³€κ²½ν•΄μ•Ό ν•˜λŠ” ν•¨μˆ˜ μ •μ˜
function addTwo(num) {
  num += 2;
}
// 같은 μž‘μ—…μ„ μ‹œλ„ν•˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜
function addTwo_v2(foo) {
  foo += 2;
}

// μ›μ‹œ 값을 인수둜 전달해 첫 번째 ν•¨μˆ˜λ₯Ό 호좜
addTwo(foo);
// ν˜„μž¬ μ›μ‹œ κ°’ λ°˜ν™˜
console.log(foo); // 5

// 두 번째 ν•¨μˆ˜λ‘œ λ‹€μ‹œ μ‹œλ„
addTwo_v2(foo);
console.log(foo); // 5

String

Javascript의 String νƒ€μž…μ€ ν…μŠ€νŠΈ 데이터λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
String은 16λΉ„νŠΈ λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜ κ°’ "μš”μ†Œ"둜 κ΅¬μ„±λœ μ§‘ν•©μœΌλ‘œ, 각각의 μš”μ†Œκ°€ String의 ν•œ 자리λ₯Ό μ°¨μ§€ν•©λ‹ˆλ‹€.
첫 번째 μš”μ†ŒλŠ” 인덱슀 0에, κ·Έλ‹€μŒ μš”μ†ŒλŠ” 인덱슀 1, κ·Έλ‹€μŒμ€ 2, ... 이런 μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.
String의 κΈΈμ΄λŠ” κ·Έ μ•ˆμ˜ μš”μ†Œ μˆ˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
String의 νŠΉμ§•μœΌλ‘œλŠ”

  • μž‘μ€λ”°μ˜΄ν‘œ(''), ν°λ”°μ˜΄ν‘œ(""), ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄(``)둜 λ¬Έμžμ—΄μ„ ν• λ‹Ήν•  수 μžˆλ‹€.
  • 특히, ES6λΆ€ν„° λ„μž…λœ ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄μ„ μ΄μš©ν•˜λ©΄, 쀄 λ°”κΏˆμ΄λ‚˜ 곡백이 λͺ¨λ‘ μ μš©λœλ‹€.

Number

JavascriptλŠ” Number와 BigInt 두 κ°€μ§€μ˜ λ‚΄μž₯ 숫자 νƒ€μž…μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
NumberλŠ” 64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ  ν˜•μ‹μœΌλ‘œ, λͺ¨λ“  숫자λ₯Ό μ‹€μˆ˜λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

var num_01 = 10; // μ •μˆ˜λ„ μ‹€μˆ˜λ‘œ μ²˜λ¦¬ν•œλ‹€.
var num_02 = -10.05; // μ‹€μˆ˜
var num_03 = 10 / 0; // +Infinity
var num_04 = 10 / -0; // -Infinity
var num_05 = 1 * 'str'; // NaN
console.log(typeof num_01); // number

BigInt

BigIntλŠ” Number의 μ›μ‹œ 값이 μ•ˆμ •μ μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” μ΅œλŒ€μΉ˜μΈ 2^53 - 1보닀 큰 μ •μˆ˜λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ” λ‚΄μž₯ κ°μ²΄μž…λ‹ˆλ‹€.

BigInt와 NumberλŠ” μ–΄λ–€ λ©΄μ—μ„œ λΉ„μŠ·ν•˜μ§€λ§Œ μ€‘μš”ν•œ 차이점이 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ»¨λŒ€ BigIntλŠ” λ‚΄μž₯ Math 객체의 λ©”μ„œλ“œμ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†κ³ , μ—°μ‚°μ—μ„œ Number와 ν˜Όν•©ν•΄ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ λ¨Όμ € 같은 μžλ£Œν˜•μœΌλ‘œ λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜, BigIntκ°€ Number둜 λ°”λ€Œλ©΄ 정확성을 μžƒμ„ 수 μžˆμœΌλ‹ˆ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
BigIntλŠ” μ •μˆ˜ λ¦¬ν„°λŸ΄μ˜ 뒀에 n을 λΆ™μ΄κ±°λ‚˜(10n) ν•¨μˆ˜ BigInt()λ₯Ό ν˜ΈμΆœν•΄ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// β†ͺ 9007199254740991n

const hugeString = BigInt('9007199254740991');
// β†ͺ 9007199254740991n

const hugeHex = BigInt('0x1fffffffffffff');
// β†ͺ 9007199254740991n

const hugeBin = BigInt(
  '0b11111111111111111111111111111111111111111111111111111'
);
// β†ͺ 9007199254740991n

+, *, -, **, % μ—°μ‚°μžλ₯Ό Number에 μ‚¬μš©ν•˜λ“― BigIntμ—μ„œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. BigIntλŠ” Number와 μ—„κ²©ν•˜κ²Œ κ°™μ§€λŠ” μ•Šμ§€λ§Œ μœ μ‚¬ν•©λ‹ˆλ‹€.

BigIntλŠ” if, ||, &&, Boolean, !처럼 λΆˆλ¦¬μ–Έ λ³€ν™˜μ΄ λ°œμƒν•˜λŠ” κ³³μ—μ„œλŠ” Number처럼 λ™μž‘ν•©λ‹ˆλ‹€.
BigIntλŠ” Number와 ν˜Όν•©ν•΄ μ—°μ‚°ν•  수 μ—†μœΌλ©°, μ΄λ•Œ TypeErrorκ°€ λ°œμƒν•©λ‹ˆλ‹€.

Boolean

μ›μ‹œμžλ£Œν˜•

컴퓨터 κ³Όν•™μ—μ„œ Boolean νƒ€μž…μ€ 논리적인 데이터 μœ ν˜•μž…λ‹ˆλ‹€.
Boolean은 μ°Έ(true) ν˜Ήμ€ 거짓(false) κ°’λ§Œμ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
Javascriptμ—μ„œ Boolean의 쑰건은 μ–΄λ–€ μ½”λ“œ 뢀문이 μ‹€ν–‰λ˜μ–΄μ•Ό ν•  지(예λ₯Ό λ“€μ–΄ if 절 μ•ˆμ—μ„œ) λ˜λŠ” μ–΄λ–€ μ½”λ“œ 뢀문을 λ°˜λ³΅ν•΄μ•Ό 할지(예λ₯Ό λ“€μ–΄ for λ¬Έ μ•ˆμ—μ„œ) κ²°μ •ν•˜λŠ” 데 μ“°μž…λ‹ˆλ‹€.
이처럼 Booleanνƒ€μž…μ€ 주둜 쑰건문에 자주 μ‚¬μš©ν•˜λ©° 0, -0, null, false, NaN, undefined, 빈 λ¬Έμžμ—΄ ("")은 false둜 κ°„μ£Όλ©λ‹ˆλ‹€.
λ¬Έμžμ—΄ falseλ₯Ό ν¬ν•¨ν•œ κ·Έ μ™Έ λͺ¨λ“  λ‹€λ₯Έ 값은 μ΄ˆκΈ°κ°’μ„ true둜 μ„€μ •ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” Boolean이 쓰일 수 μžˆλŠ” μ˜ˆμ‹œλ₯Ό λ³΄μ—¬μ£ΌλŠ” μœ μ‚¬ μ½”λ“œ(μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œκ°€ μ•„λ‹˜)μž…λ‹ˆλ‹€.

**_Javascript if Statement_**
if(boolean conditional) {
//coding
}

if(true) {
console.log("boolean conditional resolved to true");
} else {
console.log("boolean conditional resolved to false");
}


**_Javascript for Loop_**
for(control variable; boolean conditional; counter) {
//coding
}

for(var i=0; i<4; i++) {
console.log("I print only when the boolean conditional is true");
}

Symbol

심볼은 ES6μ—μ„œ μƒˆλ‘­κ²Œ μΆ”κ°€λœ νƒ€μž…μœΌλ‘œ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ›μ‹œ νƒ€μž…μ˜ 값이닀.
심볼은 주둜 μ΄λ¦„μ˜ 좩돌 μœ„ν—˜μ΄ μ—†λŠ” μœ μΌν•œ 객체의 Property Keyλ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

// 심볼 keyλŠ” μ΄λ¦„μ˜ 좩돌 μœ„ν—˜μ΄ μ—†λŠ” μœ μΌν•œ 객체의 ν”„λ‘œνΌν‹° ν‚€
var key = Symbol('key');
console.log(typeof key); // symbol

var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value

undefined

μ„ μ–Έ 이후 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ€ λ³€μˆ˜λŠ” undefined κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.
μ–΄λ–€ λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  κ·Έ 값을 μ •μ˜ν•΄μ£Όμ§€ μ•Šμ•˜μ„ λ•Œλ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 객체 ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•  경우 undefinedκ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.

var x; // 값을 ν• λ‹Ήν•˜μ§€ μ•Šκ³  λ³€μˆ˜ μ„ μ–Έ

console.log("x's value is", x); // "x's value is undefined" 좜λ ₯

null

null은 κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” 것을 λͺ…μ‹œν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
JavascriptλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ―€λ‘œ null은 Null, NULL λ“±κ³Ό λ‹€λ¦…λ‹ˆλ‹€.

null μ‚¬μš© μ‹œ, μ£Όμ˜ν•  점
νƒ€μž…μ„ λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” typeof μ—°μ‚°μžλ‘œ null 값을 연산해보면 null이 μ•„λ‹Œ object 값이 λ‚˜μ˜΅λ‹ˆλ‹€.
μ΄λŠ” Javascript 초기 μ„€κ³„μƒμ˜ 였λ₯˜μž…λ‹ˆλ‹€.

var foo = null;
console.log(typeof foo); // object

λ”°λΌμ„œ null νƒ€μž…μ„ 확인할 λ•ŒλŠ” typeof μ—°μ‚°μž λŒ€μ‹  일치 μ—°μ‚°μž(===)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

var foo = null;
console.log(typeof foo === null); // false
console.log(foo === null); // true

 

λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€!