02. Truthy and Falsy

Truthy and Falsy

이것은 μžλ°”μŠ€ν¬λ¦½νŠΈ λ¬Έλ²•κΉŒμ§€λŠ” μ•„λ‹ˆμ§€λ§Œ, μ•Œμ•„λ‘¬μ•Ό ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€. Truthy: true 같은거... Falsy: false 같은거... 라고 이해λ₯Ό ν•˜λ©΄ λ˜λŠ”λ°μš”, 예λ₯Ό λ“€μ–΄μ„œ λ‹€μŒκ³Ό 같은 ν•¨μˆ˜κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

function print(person) {
  console.log(person.name);
}

const person = {
  name: 'John'
};

print(person);

λ§Œμ•½μ— μ΄λŸ¬ν•œ μƒν™©μ—μ„œ, λ§Œμ•½ print ν•¨μˆ˜κ°€ λ‹€μŒκ³Ό 같이 νŒŒλΌλ―Έν„°κ°€ λΉ„μ–΄μ§„ μ±„λ‘œ 싀행됐닀고 κ°€μ •ν•΄λ΄…μ‹œλ‹€.

function print(person) {
  console.log(person.name);
}

const person = {
  name: 'John'
};

print();

이 μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 μ—λŸ¬λ₯Ό μƒμ„±ν•΄λƒ…λ‹ˆλ‹€.

TypeError: Cannot read property 'name' of undefined

μ΄λŸ¬ν•œ μƒν™©μ—μ„œ, λ§Œμ•½μ— print ν•¨μˆ˜μ—μ„œ λ§Œμ•½μ— object κ°€ μ£Όμ–΄μ§€μ§€ μ•Šμ•˜λ‹€λ©΄, λ¬Έμ œκ°€ μžˆλ‹€κ³  μ½˜μ†”μ— 좜λ ₯ν•΄μ•Ό ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 κ΅¬ν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

function print(person) {
  if (person === undefined) {
    return;
  }
  console.log(person.name);
}

const person = {
  name: 'John'
};

print();

그런데 λ§Œμ•½μ— λ‹€μŒκ³Ό 같이 print 에 null 값이 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ˜λ©΄ μ–΄λ–¨κΉŒμš”?

function print(person) {
  if (person === undefined) {
    console.log('person이 μ—†λ„€μš”');
    return;
  }
  console.log(person.name);
}

const person = null;
print(person);

그러면 또 였λ₯˜κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

TypeError: Cannot read property 'name' of null

그러면 또.. print ν•¨μˆ˜μ— 쑰건을 μΆ”κ°€ν•΄μ€˜μ•Όν•©λ‹ˆλ‹€.

function print(person) {
  if (person === undefined || person === null) {
    console.log('person이 μ—†λ„€μš”');
    return;
  }
  console.log(person.name);
}

const person = null;
print(person);

μ΄λ ‡κ²Œ person 이 undefined μ΄κ±°λ‚˜, null 인 상황을 λŒ€λΉ„ν•˜λ €λ©΄ μœ„μ™€ 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Όν•˜λŠ”λ°μš”, μ—¬κΈ°μ„œ μœ„ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μΆ•μ•½ν•΄μ„œ μž‘μ„± ν•  수 μžˆλ‹΅λ‹ˆλ‹€.

function print(person) {
  if (!person) { // μΆ•μ•½ν•΄μ„œ μž‘μ„± ν•œ μ½”λ“œ
    console.log('person이 μ—†λ„€μš”');
    return;
  }
  console.log(person.name);
}

const person = null;
print(person);

이게 μž‘λ™ν•˜λŠ” μ΄μœ λŠ”, undefined 와 null 은 기본적으 Falsy ν•œ κ°’μž…λ‹ˆλ‹€. Falsy ν•œ κ°’ μ•žμ— λŠλ‚Œν‘œλ₯Ό λΆ™μ—¬μ£Όλ©΄ true λ‘œμ „ν™˜λ©λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œλ₯Ό μž…λ ₯ν•΄λ³΄μ„Έμš”.

console.log(!undefined);  //true
console.log(!null);       //true

Falsyκ°’ μ’…λ₯˜λ“€

Falsy ν•œ κ°’ 5개 μžˆμŠ΅λ‹ˆλ‹€.

console.log(!undefined);   //true
console.log(!null);        //true
console.log(!0);           //true
console.log(!'');          //true
console.log(!NaN);         //true

이 값은 λͺ¨λ‘ true κ°€ λ©λ‹ˆλ‹€.

Falsy ν•œ 값은 μœ„ λ‚˜μ—΄ν•œ λ‹€μ„―κ°€μ§€ μž…λ‹ˆλ‹€.! 그리고, κ·Έ μ™Έμ˜ λͺ¨λ“  값은 Truthy ν•œ κ°’μž…λ‹ˆλ‹€.

Truthyκ°’ μ’…λ₯˜λ“€

console.log(!3);                //false
console.log(!'hello');          //false 
console.log(!['array']);        //false 
console.log(![]);               //false
console.log(!{ });              //false 

μ΄λ²ˆμ—λŠ” μ•„κΉŒμ™€λŠ” λ°˜λŒ€λ‘œ λͺ¨λ“  값이 false κ°€ λ©λ‹ˆλ‹€.

μΆ”κ°€μ μœΌλ‘œ, μ•Œμ•„λ‘λ©΄ μœ μš©ν•œ 팁 ν•˜λ‚˜λ₯Ό λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. λ§Œμ•½μ—, νŠΉμ • 값이 Truthy ν•œ 값이라면 true, κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ false 둜 값을 ν‘œν˜„ν•˜λŠ” 것을 κ΅¬ν˜„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

const value = { a: 1 };

const truthy = value ? true : false;

이전에 배운 μ‚Όν•­μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ value κ°’μ˜ 쑴재 여에 따라 μ‰½κ²Œ true 및 false 둜 μ „ν™˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. 그런데, 이λ₯Ό 더 μ‰½κ²Œ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

const value = { a: 1 };
const truthy = !!value;
console.log(truthy)        //true

!value λŠ” false κ°€ 되고, 여기에 !false λŠ” true κ°€ λ˜μ–΄μ„œ, κ²°κ³ΌλŠ” true κ°€ λ©λ‹ˆλ‹€.

Last updated

Was this helpful?