본문으둜 κ±΄λ„ˆλ›°κΈ°

200303

Β· μ•½ 15λΆ„

이 글은 κ³ ν˜„μ€€, μ†‘ν˜•μ£Ό λ‹˜μ˜ μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Όμ°Έμ‘°ν•˜μ—¬ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€.

ν”„λ‘œν† νƒ€μž…#

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  κ°μ²΄λŠ” μžμ‹ μ˜ λΆ€λͺ¨ 역할을 ν•˜λŠ” 객체와 μ—°κ²°λ˜μ–΄ μžˆλ‹€. (객체지ν–₯의 상속 κ°œλ…κ³Ό λΉ„μŠ·)

λΆ€λͺ¨ 객체의 속성을 μžμ‹ μ˜ κ²ƒμ²˜λŸΌ μ“Έ 수 μžˆλ‹€.

var foo = {    name: 'foo',    age: 30,};
console.log(foo.toString());console.dir(foo);

[좜λ ₯ κ²°κ³Ό]

2020-03-02-200303-image-0

μƒμ„±ν•œ foo κ°μ²΄μ—λŠ” toString() λ©”μ†Œλ“œκ°€ μ—†μŒμ—λ„ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ°, μ΄λŠ” foo 객체의 ν”„λ‘œν† νƒ€μž…μ— toString() λ©”μ†Œλ“œκ°€ μ •μ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  κ°μ²΄λŠ” μžμ‹ μ˜ ν”„λ‘œν† νƒ€μž…μ„ κ°€λ¦¬ν‚€λŠ” [[Prototype]] λΌλŠ” μˆ¨κ²¨μ§„ ν”„λ‘œνΌν‹°λ₯Ό 가진닀.

크둬 λΈŒλΌμš°μ €μ—μ„œλŠ” __proto__ κ°€ μˆ¨κ²¨μ§„ [[Prototype]] ν”„λ‘œνΌν‹°λ₯Ό μ˜λ―Έν•œλ‹€.

μš°μ„ μ€ Object.prototype 객체가 μƒμ„±λœ 객체의 ν”„λ‘œν† νƒ€μž… 객체가 λœλ‹€λŠ” κ²ƒλ§ŒκΈ°μ–΅ν•˜κ³  λ„˜μ–΄κ°€μž.

λ˜ν•œ 객체λ₯Ό 생성할 λ•Œ κ²°μ •λœ ν”„λ‘œν† νƒ€μž… κ°μ²΄λŠ” μž„μ˜μ˜ λ‹€λ₯Έ 객체둜 λ³€κ²½ν•˜λŠ” 것도가λŠ₯ν•˜λ‹€.

(이λ₯Ό 톡해 객체의 상속 λ“±μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•œλ‹€.)


λ°°μ—΄#

배열은 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체의 νŠΉλ³„ν•œ ν˜•νƒœμ΄λ‹€.

Cλ‚˜ Java의 λ°°μ—΄κ³Ό 같은 κΈ°λŠ₯을 ν•˜λŠ” κ°μ²΄μ§€λ§Œ 크기λ₯Ό λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ 되고, μ–΄λ–€ μœ„μΉ˜μ— μ–΄λŠ νƒ€μž…μ˜ 데이터λ₯Ό μ €μž₯ν•˜λ”λΌλ„ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. ex) var arr = [ 1, '2', true, 1.1, 'μ•ˆλ…•ν•˜μ„Έμš”', [1, 2, 3, 4]];


λ°°μ—΄ λ¦¬ν„°λŸ΄#

객체 λ¦¬ν„°λŸ΄μ΄ μ€‘κ΄„ν˜Έ {} λ₯Ό μ΄μš©ν•œ ν‘œκΈ°λ²•μ΄μ—ˆλ‹€λ©΄, λ°°μ—΄ λ¦¬ν„°λŸ΄μ€ λŒ€κ΄„ν˜Έ [] λ₯Όμ΄μš©ν•œλ‹€.

객체 λ¦¬ν„°λŸ΄μ€ key: value 쌍으둜 ν”„λ‘œνΌν‹°μ˜ 이름과 ν”„λ‘œνΌν‹°μ˜ 값을 λͺ¨λ‘ ν‘œκΈ°ν•΄μ•Ό ν•˜μ§€λ§Œ, 배열은 각 μš”μ†Œμ˜ κ°’λ§Œμ„ ν¬ν•¨ν•œλ‹€.

객체가 ν”„λ‘œνΌν‹°μ˜ μ΄λ¦„μœΌλ‘œ λŒ€κ΄„ν˜Έλ‚˜ λ§ˆμΉ¨ν‘œ ν‘œκΈ°λ²•μœΌλ‘œ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν–ˆλ‹€λ©΄, 배열은 λŒ€κ΄„ν˜Έ 내에 인덱슀 값을 λ„£μ–΄μ„œ μ ‘κ·Όν•œλ‹€.


λ°°μ—΄μ˜ μš”μ†Œ 생성#

객체가 λ™μ μœΌλ‘œ ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•  수 μžˆλ“―μ΄, 배열도 λ™μ μœΌλ‘œ μ›μ†Œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€. 특히 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ²½μš°λŠ” 값을 순차적으둜 넣을 ν•„μš” 없이 아무 인덱슀 μœ„μΉ˜μ—λ‚˜ λ™μ μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλ‹€.

var emptyArr = [];console.log(emptyArr[0]);
emptyArr[0] = 100;emptyArr[3] = 'eight';emptyArr[7] = true;console.log(emptyArr);console.log(emptyArr.length);

λ°°μ—΄μ˜ length ν”„λ‘œνΌν‹°#

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  배열은 length ν”„λ‘œνΌν‹°κ°€ μžˆλ‹€.

length ν”„λ‘œνΌν‹°λŠ” λ°°μ—΄μ˜ κ°€μž₯ 큰 μΈλ±μŠ€μ— 1을 λ”ν•œ 값이닀. (μ›μ†Œ κ°œμˆ˜μ™€ μΌμΉ˜ν•˜λŠ” 것이 μ•„λ‹˜)

var arr = [];console.log(arr.length); // 0
arr[0] = 0;arr[1] = 1;arr[2] = 2;arr[100] = 100;console.log(arr.length); // 101

arr 의 μ›μ†Œ κ°œμˆ˜κ°€ 4개 λΏμ΄μ§€λ§Œ, arr.length 의 값은 101μž„.


λ°°μ—΄μ˜ length ν”„λ‘œνΌν‹°λŠ” μ½”λ“œλ₯Ό 톡해 λͺ…μ‹œμ μœΌλ‘œ 값을 λ³€κ²½ν•  μˆ˜λ„ μžˆλ‹€.

var arr = [0, 1, 2];console.log(arr.length); // 3
arr.length = 5;console.log(arr); // [0, 1, 2, undefined, undefined]
arr.length = 2;console.log(arr); // [0, 1]console.log(arr[2]); // undefined

arr.length λ₯Ό κΈ°μ‘΄ length 보닀 크게 λ³€κ²½ν•˜λ©΄ μ›μ†Œκ°€ ν• λ‹Ήλ˜μ§€ μ•Šμ•˜λ˜ μΈλ±μŠ€λŠ” undefined 둜 좜λ ₯되고, λ˜ν•œ κΈ°μ‘΄ length 보닀 μž‘κ²Œ λ³€κ²½ν•˜λ©΄ ν• λ‹Ήλ˜μ—ˆλ˜ μΈλ±μŠ€κ°€ μ‚­μ œλœλ‹€.


λ°°μ—΄ ν‘œμ€€ λ©”μ†Œλ“œμ™€ length ν”„λ‘œνΌν‹°#

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ°°μ—΄μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ λ‹€μ–‘ν•œ ν‘œμ€€ λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•˜λŠ”λ°, μ΄λŸ¬ν•œ λ°°μ—΄ λ©”μ†Œλ“œλŠ” length ν”„λ‘œνΌν‹°λ₯Ό 기반으둜 λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— length ν”„λ‘œνΌν‹°κ°€ ꡉμž₯히 μ€‘μš”ν•˜λ‹€.

  • push() λ©”μ†Œλ“œ : λ°°μ—΄μ˜ ν˜„μž¬ length κ°’μ˜ μœ„μΉ˜μ— μƒˆλ‘œμš΄ μ›μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€.

arr.length 값을 λ³€κ²½ν•˜λ©΄ λ³€κ²½ν•œ μœ„μΉ˜ 뒀에 push() λ₯Ό ν•˜κ²Œ λœλ‹€.


λ°°μ—΄κ³Ό 객체#

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ°°μ—΄ μ—­μ‹œ 객체인데, 배열은 일반 객체와 μ•½κ°„ 차이가 μžˆλ”°.

// colorsArray λ°°μ—΄var colorsArray = ['orange', 'yellow', 'green'];console.log(colorsArray[0]); // orangeconsole.log(colorsArray[1]); // yellowconsole.log(colorsArray[2]); // green
// colorsObj 객체var colorsObj = {    0: 'orange',    1: 'yellow',    2: 'green',};console.log(colorsObj[0]); // orangeconsole.log(colorsObj[1]); // yellowconsole.log(colorsObj[2]); // green
// typeof μ—°μ‚°μž 비ꡐconsole.log(typeof colorsArray); // objectconsole.log(typeof colorsObj); // object
// length ν”„λ‘œνΌν‹°console.log(colorsArray.length); // 3console.log(colorsObj.length); // undefined
// λ°°μ—΄ ν‘œμ€€ λ©”μ†Œλ“œcolorsArray.push('red');console.log(colorsArray); // ['orange', 'yellow', 'green', 'red']colorsObj.push('red'); // Uncaught TypeError: Object #<Object> has no method 'push'
  • λ°°μ—΄κ³Ό κ°μ²΄λŠ” μœ μ‚¬ν•˜κ²Œ λ¦¬ν„°λŸ΄ λ°©μ‹μœΌλ‘œ 생성할 수 있고, κ²°κ³Όκ°’ 좜λ ₯κ³Ό ν”„λ‘œνΌν‹°μ ‘κ·Ό λͺ¨λ‘ λΉ„μŠ·ν•˜κ²Œ ν•  수 μžˆλ‹€.

객체의 ν”„λ‘œνΌν‹° μ ‘κ·Όμ—μ„œ ν”„λ‘œνΌν‹° 속성을 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ 적어야 ν•˜λŠ”λ°, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 [] 내뢀에 μˆ«μžκ°€ μ‚¬μš©λ  경우, 숫자λ₯Ό μžλ™μœΌλ‘œ λ¬Έμžμ—΄ ν˜•νƒœλ‘œλ°”κΎΈμ–΄μ£Όμ–΄ μ •μƒμ μœΌλ‘œ μ ‘κ·Όλœ 것을 λ³Ό 수 μžˆλ‹€.

  • typeof μ—°μ‚°μž κ²°κ³Όκ°€ λͺ¨λ‘ object 이닀.

  • κ°μ²΄μ—λŠ” length ν”„λ‘œνΌν‹°κ°€ μ—†λ‹€. ( undefined )

  • κ°μ²΄μ—μ„œλŠ” λ°°μ—΄ ν‘œμ€€ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†λ‹€.

객체의 경우 객체 ν‘œμ€€ λ©”μ†Œλ“œλ₯Ό μ €μž₯ν•˜κ³  μžˆλŠ” Object.prototype 객체가 ν”„λ‘œν† νƒ€μž…μΈ 반면 λ°°μ—΄μ˜ 경우 Array.prototype 객체가 ν”„λ‘œν† νƒ€μž…μ΄λ‹€. λ˜ν•œ Array.prototype 의 ν”„λ‘œν† νƒ€μž…μ€ Object.prototype 객체이닀. λ”°λΌμ„œ 배열은 Array.prototype 에 ν¬ν•¨λœ λ°°μ—΄ ν‘œμ€€ λ©”μ†Œλ“œμ™€ Object.prototype 의 객체 ν‘œμ€€λ©”μ†Œλ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.


λ°°μ—΄μ˜ ν”„λ‘œνΌν‹° 동적 생성#

배열도 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체둜, μΈλ±μŠ€κ°€ 숫자인 λ°°μ—΄ μ›μ†Œ 이외에도 객체처럼 λ™μ μœΌλ‘œν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

// λ°°μ—΄ 생성var arr = ['zero', 'one', 'two'];console.log(arr.length); // 3
// ν”„λ‘œνΌν‹° 동적 μΆ”κ°€arr.color = 'blue';arr.name = 'number_array';console.log(arr.length); // 3
// λ°°μ—΄ μ›μ†Œ μΆ”κ°€arr[3] = 'red';console.log(arr.length); // 4
// λ°°μ—΄ 객체 좜λ ₯console.dir(arr);

[ console.dir(arr) 좜λ ₯ κ²°κ³Ό]

2020-03-02-200303-image-1

배열도 객체처럼 key: value ν˜•νƒœλ‘œ λ°°μ—΄ μ›μ†Œ 및 ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.


λ°°μ—΄μ˜ ν”„λ‘œνΌν‹° μ—΄κ±°#

κ°μ²΄λŠ” for in 문으둜 ν”„λ‘œνΌν‹°λ₯Ό μ—΄κ±°ν•˜λŠ”λ°, 배열도 κ°μ²΄μ΄λ―€λ‘œ for in 문을 μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•˜μ§€λ§Œ, λΆˆν•„μš”ν•œ ν”„λ‘œνΌν‹°κ°€ 좜λ ₯될 수 μžˆμœΌλ―€λ‘œ for 문을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

for of λ¬Έ for in 은 객체의 λͺ¨λ“  μ—΄κ±°κ°€λŠ₯ν•œ 속성에 λŒ€ν•΄ λ°˜λ³΅ν•˜λŠ” 반면, for of 문은 μ»¬λ ‰μ…˜ μ „μš©μœΌλ‘œ [Symbol.iterator] 속성이 μžˆλŠ” μ»¬λ ‰μ…˜ μš”μ†Œμ— λŒ€ν•΄ λ°˜λ³΅ν•œλ‹€.

const iterable = [10, 20, 30];
for (const value of iterable) {    console.log(value);}// 10// 20// 30

☝ 의문 : μ°Έμ‘° λ³€μˆ˜μ˜ let , const 차이 - πŸ”— [javascript] ES6 λ°˜λ“œμ‹œ μ•Œμ•„μ•Όν•  문법 let, const 차이점

κΈ°λ³Έ λ³€μˆ˜μΌ λ•Œ

  • let : λ³€μˆ˜

  • const : μƒμˆ˜

μ°Έμ‘° λ³€μˆ˜μΌ λ•Œ

  • let : 참쑰값이 λ³€ν•  수 있음. (λ‹€λ₯Έ 객체 지정 κ°€λŠ₯)

  • const : 참쑰값이 λ³€ν•  수 μ—†μŒ. (λ‚΄λΆ€ 속성은 λ³€ν™” κ°€λŠ₯)

const objA = {};let objB = {};
objA = objB; // Error: "objA" is read-onlyobjB = objA;

λ°°μ—΄ μš”μ†Œ μ‚­μ œ#

배열도 κ°μ²΄μ΄λ―€λ‘œ λ°°μ—΄ μš”μ†Œλ‚˜ ν”„λ‘œνΌν‹°λ₯Ό μ‚­μ œν•˜λŠ” 데 delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  μˆ˜μžˆλ‹€.

var arr = ['zero', 'one', 'two', 'three'];delete arr[2];console.log(arr); // ['zero', 'one', undefined, 'three']console.log(arr.length); // 4

delete arr[2] 둜 λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ‚­μ œν•˜λ©΄, arr[2] 에 undefined κ°€ ν• λ‹Ήλ˜κ²Œλ˜μ§€λ§Œ, λ°°μ—΄μ˜ length 값은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉 μ›μ†Œ 자체λ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€.

λ•Œλ¬Έμ— λ°°μ—΄μ—μ„œ μš”μ†Œλ₯Ό μ™„μ „νžˆ μ‚­μ œν•  경우 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” splice() λ°°μ—΄ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.


splice() ν•¨μˆ˜#

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

λ§€κ°œλ³€μˆ˜

  • start : λ°°μ—΄μ˜ 변경을 μ‹œμž‘ν•  인덱슀, λ°°μ—΄μ˜ 길이보닀 큰 값이라면 λ°°μ—΄μ˜ 길이둜 섀정됨. 음수일 경우 λ°°μ—΄μ˜ λμ—μ„œλΆ€ν„° μ„Έμ–΄κ°€κ³ , μ ˆλŒ€κ°’μ΄ λ°°μ—΄μ˜ 길이보닀 큰경우 0으둜 섀정됨

  • deleteCount [μ˜΅μ…”λ„] : λ°°μ—΄μ—μ„œ μ œκ±°ν•  μš”μ†Œμ˜ 수. 0이면 μ–΄λ–€ μš”μ†Œλ„ μ œκ±°ν•˜μ§€μ•ŠμŒ. (μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•  λ•Œ μ‚¬μš©)

  • item1, item2, ... [μ˜΅μ…”λ„] : 배열에 μΆ”κ°€ν•  μš”μ†Œ. μ—†μœΌλ©΄ splice() λŠ” μš”μ†Œλ₯Όμ œκ±°ν•˜κΈ°λ§Œ ν•œλ‹€.

λ°˜ν™˜ κ°’

  • μ œκ±°ν•œ μš”μ†Œλ₯Ό 담은 λ°°μ—΄, ν•˜λ‚˜λ§Œ μ œκ±°ν•œ 경우 길이가 1인 배열을 λ°˜ν™˜ 아무 κ²ƒλ„μ œκ±°ν•˜μ§€ μ•ŠμœΌλ©΄ 빈 λ°°μ—΄.

Array() μƒμ„±μž ν•¨μˆ˜#

일반적인 λ¦¬ν„°λŸ΄λ‘œ μƒμ„±ν•˜λŠ” 것도 κ²°κ΅­ μƒμ„±μž ν•¨μˆ˜λ‘œ μƒμ„±ν•˜λŠ” 과정을 λ‹¨μˆœν™”ν•œ 것이닀.

Array() μƒμ„±μžλ‘œ 생성할 λ•ŒλŠ” λ°˜λ“œμ‹œ new μ—°μ‚°μžλ₯Ό μ¨μ•Όν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜μž.

Array() μƒμ„±μž ν•¨μˆ˜λŠ” ν˜ΈμΆœν•  λ•Œ 인자 κ°œμˆ˜μ— 따라 λ™μž‘μ΄ λ‹€λ₯΄λ‹€.

  • ν˜ΈμΆœν•  λ•Œ μΈμžκ°€ 숫자 1개 일 경우 : 호좜된 인자λ₯Ό length 둜 κ°–λŠ” 빈 λ°°μ—΄ 생성

  • κ·Έ μ™Έ : 호좜된 인자λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” λ°°μ—΄ 생성

var foo = new Array(3);console.log(foo); // [undefined, undefined, undefined]console.log(foo.length); // 3
var bar = new Array(1, 2, 3);console.log(bar); // [1, 2, 3]console.log(bar.length); // 3

μœ μ‚¬ λ°°μ—΄ 객체#

λ§Œμ•½ 일반 객체에 length λΌλŠ” ν”„λ‘œνΌν‹°κ°€ 있으면 μ–΄λ–»κ²Œ 될까? - μ΄λŸ¬ν•œ 객체λ₯Ό μœ μ‚¬ λ°°μ—΄ 객체(array-like object) 라고 ν•œλ‹€.

μœ μ‚¬ λ°°μ—΄ κ°μ²΄λŠ” κ°μ²΄μž„μ—λ„ λΆˆκ΅¬ν•˜κ³  ν‘œμ€€ λ°°μ—΄ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ”κ²Œ κ°€λŠ₯ν•˜λ‹€. ( apply() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€)

var arr = ['bar'];var obj = {    name: 'foo',    length: 1,};
arr.push('baz');console.log(arr); // ['bar', 'baz']
Array.prototype.push.apply(obj, ['baz']);console.log(obj); // { '1': 'baz', name: 'foo', length: 2}

arguments κ°μ²΄λ‚˜ jQuery 객체가 μœ μ‚¬ λ°°μ—΄ 객체 ν˜•νƒœλ‘œ λ˜μ–΄ μžˆλ‹€.


κΈ°λ³Έ νƒ€μž…κ³Ό ν‘œμ€€ λ©”μ„œλ“œ#

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 숫자, λ¬Έμžμ—΄, Boolean 에 λŒ€ν•΄ 각 νƒ€μž…λ³„λ‘œ 호좜 κ°€λŠ₯ν•œ ν‘œμ€€ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜κ³  μžˆλ‹€.

κΈ°λ³Έ νƒ€μž…μ˜ κ²½μš°λŠ” 객체가 μ•„λ‹Œλ° μ–΄λ–»κ²Œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ”κ°€?

기본값은 λ©”μ†Œλ“œ 처리 μˆœκ°„μ— 객체둜 λ³€ν™˜λœ λ‹€μŒ νƒ€μž…λ³„ ν‘œμ€€ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ , λλ‚˜λ©΄ λ‹€μ‹œ κΈ°λ³Έκ°’μœΌλ‘œ λ³΅κ·€ν•œλ‹€.

var num = 0.5;console.log(num.toExponential(1)); // 5.0e-1
console.log('test'.charAt(2)); // s

μ—°μ‚°μž#

+ μ—°μ‚°μž#

λ”ν•˜κΈ° μ—°μ‚°κ³Ό λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°

typeof μ—°μ‚°μž#

ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ„ λ¬Έμžμ—΄ ν˜•νƒœλ‘œ 리턴.

TypeNametypeof κ²°κ³Ό
κΈ°λ³Έ νƒ€μž…μˆ«μž'number'
κΈ°λ³Έ νƒ€μž…λ¬Έμžμ—΄'string'
κΈ°λ³Έ νƒ€μž…Boolean'boolean'
κΈ°λ³Έ νƒ€μž…null'object'
κΈ°λ³Έ νƒ€μž…undefined'undefined'
μ°Έμ‘° νƒ€μž…κ°μ²΄'object'
μ°Έμ‘° νƒ€μž…λ°°μ—΄'object'
μ°Έμ‘° νƒ€μž…ν•¨μˆ˜'function'

☝ null κ³Ό 배열이 'object' λΌλŠ” 점. ν•¨μˆ˜λŠ” 'function' μ΄λΌλŠ” 점에 유의


동등 μ—°μ‚°μž( == )와 일치 μ—°μ‚°μž( === )#

동등 μ—°μ‚°μžλŠ” λΉ„κ΅ν•˜λ €λŠ” ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ΄ λ‹€λ₯Ό κ²½μš°μ— νƒ€μž… λ³€ν™˜ ν›„ 비ꡐ.

일치 μ—°μ‚°μžλŠ” νƒ€μž…μ΄ λ‹€λ₯Ό 경우 λ³€κ²½ν•˜μ§€ μ•Šκ³  비ꡐ.

== 동등 μ—°μ‚°μžλŠ” ꢌμž₯λ˜μ§€ μ•ŠμŒ.


!! μ—°μ‚°μž#

!! μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžλ₯Ό Boolean κ°’μœΌλ‘œ λ³€ν™˜ν•œλ‹€.

console.log(!!0); // falseconsole.log(!!1); // trueconsole.log(!!''); // falseconsole.log(!!'string'); // trueconsole.log(!!false); // falseconsole.log(!!true); // trueconsole.log(!!null); // falseconsole.log(!!undefined); // falseconsole.log(!!{}); // trueconsole.log(!![]); // true

null κ³Ό undefined λŠ” false , 객체와 배열은 λͺ¨λ‘ λΉ„μ–΄μžˆμ–΄λ„ true