Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript Symbol.isConcatSpreadable 심볼 – concat() 배열 병합 동작 제어하기

Symbol.isConcatSpreadable 심볼이란?

Symbol.isConcatSpreadable은 자바스크립트의 잘 알려진 심볼(well-known symbol) 중 하나로, Array.prototype.concat() 메서드로 배열을 병합할 때 중첩된 배열을 개별 요소로 펼칠지(flatten) 여부를 지정하는 데 사용됩니다.

기본적으로 concat() 메서드는 배열 인수를 만나면 해당 배열의 요소들을 하나씩 꺼내 새 배열에 추가합니다. 하지만 대상 객체의 Symbol.isConcatSpreadable 속성을 false로 설정하면, 그 배열은 더 이상 펼쳐지지 않고 하나의 단일 요소로 취급됩니다.

  • true 또는 미설정(기본값): 배열이 개별 요소로 펼쳐져 병합됩니다.
  • false: 배열 전체가 하나의 요소로 그대로 추가됩니다.

예제 코드

다음은 Symbol.isConcatSpreadable 심볼의 동작을 확인할 수 있는 예제입니다 −

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
   body {
      font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
   }
   div {
      font-size: 20px;
      font-weight: 500;
   }
   .result {
      color: red;
   }
</style>
</head>
<body>
<h1>JavaScript Symbol.isConcatSpreadable symbol</h1>
<div class="sample"></div>
<button class="Btn">CLICK HERE</button>
<h3>
Click on the above button to concat the both array into a single one
</h3>
<div class="result">isConcatSpreadable = true</div>
<div class="result">isConcatSpreadable = False</div>
<script>
   let fillEle = document.querySelector(".sample");
   let result = document.querySelectorAll(".result");
   let ele = [1, 2, 3];
   let ele2 = ["A", "B", "C"];
   let concatArr;
   fillEle.innerHTML += ele + "<br>" + ele2 + "<br>";
   document.querySelector(".Btn").addEventListener("click", () => {
      concatArr = ele.concat(ele2);
      for (let x of concatArr.entries()) {
         result[0].innerHTML += x + " - ";
      }
      result.innerHTML += "<br><br>";
      ele2[Symbol.isConcatSpreadable] = false;
      concatArr = ele.concat(ele2);
      for (let x of concatArr.entries()) {
         result[1].innerHTML += x + " - ";
      }
   });
</script>
</body>
</html>

출력 결과

JavaScript Symbol.isConcatSpreadable 심볼 – concat() 배열 병합 동작 제어하기

위 화면에서 "CLICK HERE" 버튼을 클릭하면 다음과 같은 결과를 확인할 수 있습니다 −

JavaScript Symbol.isConcatSpreadable 심볼 – concat() 배열 병합 동작 제어하기

첫 번째 결과에서는 ele2 배열이 기본 동작대로 개별 요소("A", "B", "C")로 펼쳐져 병합된 것을 볼 수 있습니다. 반면 두 번째 결과에서는 ele2[Symbol.isConcatSpreadable] = false;가 적용되어, ele2 배열 전체가 하나의 요소로 추가된 것을 확인할 수 있습니다.