진리 표 (Javascript과 Python)

개발파이어·2024년 12월 9일

언어 통찰

목록 보기
2/2
post-thumbnail

목차

진리표의 정의

진리표의 사전적 정의[위키피디아]


개발을 진행하면서 조건문을 사용하는 경우가 많습니다. 이때 언어별 진리표를 외우고 있지 않으면 다소 어색한 방식으로 조건문을 작성하게 됩니다.

const sample = ''
if (!sample){
	console.log('빈 문자열입니다.')
}

if (sample.length === 0){
 	console.log('빈 문자열입니다.') 
}
  • 당장 위 2개의 예시만 봐도 진리표 여부에 따라 .length === 0을 단순히 !으로 대체가 가능한 걸 확인할 수 있습니다.

Javascript 진리표

Boolean 평가 (Truthy/Falsy)설명
falseFalsyfalse 리터럴
0Falsy숫자 0
-0Falsy음수 0
0nFalsyBigInt 0
""Falsy빈 문자열
nullFalsy값이 없음
undefinedFalsy정의되지 않은 값
NaNFalsy숫자가 아님(Not-a-Number)
trueTruthytrue 리터럴
{}Truthy빈 객체
[]Truthy빈 배열
"0"Truthy값이 있는 문자열 (숫자 형태 포함)
"false"Truthy값이 있는 문자열
InfinityTruthy양의 무한대
-InfinityTruthy음의 무한대
42Truthy0이 아닌 숫자
-42Truthy0이 아닌 음수
0.1Truthy0이 아닌 부동소수점 값
" "Truthy공백이 포함된 문자열

Python 진리표

Boolean 평가 (Truthy/Falsy)설명
FalseFalsyFalse 리터럴
NoneFalsy값이 없음을 나타냄
0Falsy정수 0
0.0Falsy부동소수점 0
0jFalsy복소수 0
Decimal(0)FalsyDecimal 0
Fraction(0, 1)FalsyFraction 0
""Falsy빈 문자열
()Falsy빈 튜플
[]Falsy빈 리스트
{}Falsy빈 딕셔너리
set()Falsy빈 집합
frozenset()Falsy빈 불변 집합
range(0)Falsy빈 range 객체
TrueTruthyTrue 리터럴
1Truthy0이 아닌 정수
-1Truthy0이 아닌 음수 정수
0.1Truthy0이 아닌 부동소수점 값
1jTruthy0이 아닌 복소수
" "Truthy공백이 포함된 문자열
("값",)Truthy값이 있는 튜플
[1, 2, 3]Truthy값이 있는 리스트
{"키": "값"}Truthy값이 있는 딕셔너리
{1, 2, 3}Truthy값이 있는 집합
frozenset({1, 2})Truthy값이 있는 불변 집합
range(1, 10)Truthy값이 있는 range 객체

Javascript과 Python 진리표의 차이 이유

두 언어의 진리표 차이는 [], {}에 대한 평가입니다.
javascript는 빈 배열과 빈 객체를 참조형 데이터로 바라보고, python은 집합의 관점에서 공집합으로 해석합니다.

  • python에서는 집합 개념으로 객체의 truthy를 평가하는데, 공집합인 경우 false를 나타냅니다.
  • javascript은 빈 배열과 객체는 참조 객체로 메모리에 존재하기에 true로 표현합니다.

Javascript ==와 ===의 차이점

요약: ==은 값만 비교를 하면 이때 type coercion이 발생합니다. ===은 값과 타입을 비교하며 명시적

  • type coercion이란 타입의 변환으로 javascript에서는 느슨한 타입 언어의 특성으로 암시적 변환이 가능합니다.
    - 피연산자 중 하나라도 문자열인 경우 문자열로 바뀝니다.
    • 산술 연산자 같은 경우 피연산자가 하나라도 숫자인 경우 숫자로 바뀝니다.(+은 문자열 결합으로 문자열로 합치려 합니다.)
      - 논리 연산자 같은 경우 truthy/falsy로 전환됩니다
// type coercion 예시
console.log(3-"5") // -2
console.log(3+"5") // "35"
console.log(''==false) // true
  • python 같은 경우 Zen of Python이 "Explicit is better than implicit"의 원칙에 의해 암시적 변환이 안되기에 "5" + 3과 같은 다른 타입인 경우 에러가 납니다.
profile
안녕하세요

0개의 댓글