0%

201120_TIL(데이터 타입, 제어문)

오늘 한 것

데이터 타입

1
2
3
4
5
//이스케이프시퀀스도 좋지만 가독성이 안 좋다.
var string = "안녕'하세요' ";

//`(백틱)을 사용하는게 낫다.
var string = `안녕'하세요'`;

변수가 아닌 값이 데이터 타입을 갖는다.

변수는 남발하면 안 되고 신중하게 써야함. 많이 쓸 수록 에러 발생률도 비례해서 높아짐.

연산자

1
2
3
4
// 지수 연산자
2 ** 2; // -> 4
// 제곱하는 메서드
Math.pow(2, 2); // -> 4

부수 효과가 있는 연산자는 할당(= , += …) 연산자, 증가/감소(++/ -- ) 연산자, delete 연산자이다.

제어문

제어문은 논리적 흐름에서 벗어날 때가 많음 (가독성이 떨어짐)

→ 가독성을 위해 제어문은 효율적이지만 대체 가능하다면 대체하는게 좋을 수 있음. (forEach, map, filter() …)

블록문

1
2
3
{
// 블록문
}
  • 관련 문들을 하나로 묶기 위함으로 사용한다.
  • 다른 언어는 블록문이 하나의 스코프이다.
  • Javascript는 블록문이 독립된 스코프가 아니다.
  • Javascript는 블록문을 함수가 아니면 하나의 스코프로 취급하지 않는다. (var 일 경우 블록문 외부에서도 사용 가능)
  • let 은 블록문 내에서 선언하면 해당 블록 안에서만 유효하다.
1
2
3
4
5
6
7
8
9
10
11
for (var i = 0; i < 5; i++) {
var result = "";
result += "*";
}
console.log(result); // *

for (var k = 0; k < 5; k++) {
let star = "";
star += "*";
}
console.log(star); // ReferenceError: star is not defined

공부한 javaScript 코딩 문제

1.직사각형 별찍기

문제 설명
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건
n과 m은 각각 1000 이하인 자연수입니다.

나의 답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
process.stdin.setEncoding("utf8");
process.stdin.on("data", (data) => {
const n = data.split(" ");
const a = Number(n[0]),
b = Number(n[1]);

for (var i = 0; i < b; i++) {
for (var j = 0; j < a; j++) {
var result = "";
result = result + "*";
}
console.log(result);
}
});

감탄한 타인의 답안

1
2
3
4
5
6
7
8
9
10
process.stdin.setEncoding("utf8");
process.stdin.on("data", (data) => {
const n = data.split(" ");
const a = Number(n[0]),
b = Number(n[1]);
const row = "*".repeat(a);
for (let i = 0; i < b; i++) {
console.log(row);
}
});

오늘 느낀 것

  • javascript에서 왜 계속 반복문 내부 변수가 밖에서도 사용 가능한가 이상했는데 역시 javascript 블록문은 독립된 스코프가 아니었다.
  • javascript는 예상도 못한 점에서 달라서 생각보다 시행착오가 많이 생긴다.

Nyong’s GitHub