전체 글30 [Javascript] 옵셔널 체이닝(?.) 연산자 ES11에서 도입된 옵셔널 체이닝 연산자(?.)에 대해 알아보자 정의는 다음과 같다. 좌항의 피연산자가 null 또는 undefined 일 경우 undefined 리턴하고 아닐경우 우항을 리턴한다. 사용 예시) var elem = null; var value = elem?.value; console.log(value) // undefined elem이 null이니 undefined를 리턴하였다. 만약 옵셔널 체이닝 연산자 없이 elem.value에 직접 접근하려고 하였다면 위와같은 type error를 볼 수 있다. 참고) 위 타입에러를 피하기 위해서 옵셔널 체이닝이 없을 때는 [단순 평가]를 활용하였다. var elem = null; var value = elem && elem.value; consol.. 2023. 2. 9. [linux] 리눅스 ^M 문자 sub Directory까지 (resursive) 삭제 CR(carriage return)은 커서를 맨앞으로 이동하는 것 LF(Line Feed)는 커서를 다음줄로 내리는 것 윈도우에서는 개행을 CR+LF (캐리지 리턴 + 라인 피드) 그 이외 OS에서는 개행을 LF(라인피드)로 처리한다. 따라서 윈도우(CR+LF)에서 리눅스(LF)로 파일을 이동했을 때 LF는 정상 처리되고 ^M (ASCII CODE %o015(10진수 : 13))라는 CR값이 나홀로 남아있다. (파일을 저장한 Editor에 따라서 안나타날 수도 있다) 이럴경우 다음의 명령어를 치면 recursive하게 ^M(CR) 문자가 사라진다. find . -exec perl -pi -e 's/\01//g' {} \; 역사 토막상식) 팩스 시대에서는 CR(커서를 맨앞으로 이동) LF(종이를 위로 1줄.. 2023. 2. 6. [Javascript] 중첩 for문에서 탈출하기 - 레이블(label) 이용 중첩된 for문에서 for문 바깥으로 나와버리고 싶을때가 있다. break;가 쉽게 떠올리지만 break문은 한단계만 탈출이 가능하다. for (var i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { if (i == 1) break; console.log(`inner [${i}, ${j}]`); } } 결과값 : 내가 원하는 동작이 i==1이 되면 for문을 아예 나와버리고 싶을 때 레이블을 이용하면 쉽게 탈출이 가능하다. (물론 위 조건의 경우 for문의 바깥 스코프에서 break;하면 되겠지만 조건이 까다롭다고 상상해보자) outer: for (var i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { if (i == .. 2023. 2. 5. [Javascript] 삼항 조건 연산자 vs if else 문 둘 다 같은 기능을 수행한다. 따라서 어느 것을 사용해도 상관없지만 사소하고 미묘한 차이가 존재한다. 삼항 조건 연산자는 값으로 인식한다. var result = x % 2 ? '홀수' : '짝수'; console.log(result); // 짝수 즉, 위와 같이 result라는 변수에 삼항 조건 연산자를 대입하여 사용할 수 있다. 그에 반해 if else문은 값처럼 사용이 불가능하다. var result = if ( x % 2) { result = '홀수'; } else { result = '짝수'; }; 결과 : 정리 1. 삼항연산자는 변수에 저장해두고 다른 표현식에 활용할 때 유용하다. 2. if else 문은 조건이 여러개일 때 삼항 조건 연산자보다 가독성이 더 좋다. 2023. 2. 5. [Javascript] 컴퓨터는 어떻게 메모리를 참조할까 코딩을 할때 변수나 함수 선언시 데이터 타입이 정해진다. Javascript를 예로 들어보겠다. var score = 100; 숫자 타입의 식별자(score)가 선언 및 초기화되었다. 그렇다면 컴퓨터 내부에서는 어떤일이 일어날까? 1. (변수 선언 호이스팅) 메모리를 확보한다. 1-1. Javascript number 타입은 64비트 부동소수점 형식을 이용하므로 메모리에서 8바이트를 확보한다. 1-2. 확보된 8바이트를 undefine으로 초기화한다. 2. 심볼 테이블에 score 식별자에 대한 메모리 주소, 데이터 타입, 스코프를 저장한다. 3, score에 100을 대입하기 위해 새로운 메모리를 할당한다. 4. 심볼 테이블에 식별자 score에 대한 바뀐 메모리 주소를 입력한다. 컴퓨터가 score의.. 2023. 2. 5. [JavaScript] 템플릿 리터럴 vs 일반 문자열 일반 문자열에서 개행을 표현하기 위한 다음의 코드는 에러가 난다. let string = 'hello world!'; console.log(string); 실행 결과 개행된 출력을 얻기 위해서는 다음처럼 코딩해야 한다. let string = 'hello\nworld!'; console.log(string); 실행 결과 즉, 일반 문자열에서는 이스케이프 시퀀스인 \n(LF, Line Feed)를 문자열 내에 써줘야 한다. 이에 반해 백틱(``)을 이용하여 표현하는 템플릿 리터럴은 이스케이프 시퀀스(\n, \t 등) 없이 보여지는 대로 사용이 가능하다. * 템플릿 리터럴은 ES6부터 지원함. let string = `hello world!`; console.log(string); 실행 결과 템플릿 리터럴은.. 2023. 2. 4. 이전 1 2 3 4 5 다음