논리연산자(논리합,옵셔널 체이닝,null 병합연산자)로 코드 간결하게 하기, if문 줄이기

javascript
블로그 이미지

이챙(leechaeng)

﹒2022. 6. 28.

자바스크립트에서 연산자를 활용하면 코드를 간결하게 바꿀 수 있다. if문으로 여러줄 되어 있는 코드를 한줄로 가능하다는 말씀! 
잘 사용하지 않았던 연산자 위주로 포스팅 해보았다

 

1️⃣ 논리합 연산자 &&

앞에 값이 true이면 뒤에 값을 실행.

true && true // 앞에 값이 true 니까 뒤에꺼 true 실행
false && false // 앞에 값이 false 니까 false (뒤에 값 실행x)
true && false // 앞에 값이 true니까 뒤에 값 false 실행


앞에 값이 true false 냐 에 따라 boolean 값을 반환 해준다.
논리합 연산자를 활용하여 예제를 활용해보자

<div>
    <button id="clickBtn">클릭1</button>
    <p id="text"></p>
</div>

</body>
<script>

const $clickBtn = document.querySelector('#clickBtn')
const $text = document.querySelector('#text')
let num = 0;


$clickBtn.addEventListener('click', function(){
  if($clickBtn.innerHTML != ''){
      $text1.textContent = num++
  }
})
     
</script>


버튼을 클릭하면 p에 num값이 증가되는 코드를 간단하게 짜보았다. if문으로 클릭버튼에 text가 들어있지 않을때 값이 증가하도록 하였다.
이 코드를 논리합연산자를 활용하여 바꾸어 보면??


<div>
    <button id="clickBtn">클릭1</button>
    <p id="text"></p>
</div>

</body>
<script>

const $clickBtn = document.querySelector('#clickBtn')
const $text = document.querySelector('#text')
let num = 0;


$clickBtn.addEventListener('click', function(){
	$clickBtn.innerHTML != '' && ($text1.textContent = num++) // 버튼에 text가 없으면? p태그에 num값을 넣어라
})
     
</script>


요렇게 한줄로 바꾸었다. 
현재 버튼에 text가 클릭1이라고 값이 들어 있으니 true,
뒤에 num++ 가 실행되는것 이다.
코드를 한줄로 바꿀 순 있지만 if문이 가독성이 더 좋아보인당...ㅎㅎ;; 😅

 

 


 

 

2️⃣ null 병합 연산자 ??

앞에 값이 null,undefined 일때만 뒤에 값이 실행.

undefined ?? 'false 값 입니다' // 'false 값 입니다'
1 ?? 'false 값 입니다' // 1

 

<body>

<ul id="numberList">

</ul>

</body>

<script>
const $numberList = document.querySelector('#numberList');
const arr = Array(10).fill();

for(let i = 0; i < 5; i++){
    const selectNum = Math.floor(Math.random() * 10)
    arr[selectNum] = 1
}

arr.forEach((el,i)=>{
   $numberList.appendChild(document.createElement('li'))
   if(!el){
    $numberList.children[i].textContent = '비어있는 데이터 입니다'
  }else{
    $numberList.children[i].textContent = el
  }
})
</script>


arr 배열에 undefined,1 값을 랜덤으로 넣고 $numberList의 li에 해당 값을 뿌려주었다.
값이 undefined면 '비어있는 데이터 입니다' 이고 값이 1 이면 1값이 출력 되도록 했다.


<body>

<ul id="numberList">

</ul>

</body>

<script>
const $numberList = document.querySelector('#numberList');
const arr = Array(10).fill();

for(let i = 0; i < 5; i++){
    const selectNum = Math.floor(Math.random() * 10)
    arr[selectNum] = 1
}

arr.forEach((el,i)=>{
  $numberList.appendChild(document.createElement('li'))
  
  const infoText = el ?? '비어있는 데이터 입니다'
  $numberList.children[i].textContent = infoText
})
</script>


if문 대신 null병합 연산자를 활용하여 infoText변수에 값을 저장하고 li에 infoText변수 값을 뿌려주었다
위의 코드를 비교해봤을때 중복코드도 사라지고 ?? 연산자 두글자로 undefined를 걸러주는 조건문을 해결해 주었다
이 연산자는 모르고 있었었는데...공부하다가 알게되었다. 나름 유용하게 쓰일듯...? ㅎ

 

 


 

 

3️⃣ 옵셔널체이닝 ?.

?.기준으로 뒤의 값이 undefined or null 이면 undefined를 반환한다.
옵셔널체이닝은 연산자는 아니고 문법인데 주로 리액트 상태관리 할때 많이 사용했었다.

const user = {
    name : "공작새",
    age : 20,
    address: {
        home: 'seoul',
        work: null,
    }
}
console.log(user?.name) // 공작새
console.log(user?.name?.work) // undefined


옵셔널 체이닝을 사용하면 에러가 발생하지 않는다. 안전?하게 값을 가져 올 수 있다

const user = {}

console.log(user.address.work) //Cannot read properties of undefined (reading 'work')
console.log(user?.address?.work) //undefined


단순 객체 프로퍼티 값을 가져왔더니 에러가 발생하지만 옵셔널체이닝을 사용했더니 undefined를 반환한다.

 

 

이챙(leechaeng)
이챙(leechaeng)

프론트엔드 개발도 하고 뛰기도 하고

'javascript' 카테고리의 관련 글