// 내 코드
const board = document.querySelector(".board");
const turn = document.querySelector(".turn");
// 수정된 코드
const $board = document.querySelector(".board");
const $turn = document.querySelector(".turn");
// 내 코드
const selectBox = document.querySelectAll(".box");
// 수정한 코드
const $selectBoxes = document.querySelectAll(".box");
참고 : querySelectorAll
// 내 코드
if ($turn.textContent === "O") {
$turn.textContent = "X";
} ele {
$turn.textContent = "O"
}
// 수정한 코드
$turn.textContent = textContent === "O" ? "X" : "O";
2개의 피연산자가 동일한지 확인하며 Boolean 값을 반환함
일치 연산자(===)와 다르게 타입 변환을 통해 다른 타입의 피연산자끼리 비교함
예상치 못한 버그를 발생시킬 수 있는 동등 연산자(==)보다 일치 연산자(===)를 사용하자!
// 내 코드
if (event.target.textContent == "") {
event.target.textContent == $turn.textContent;
...
}
// 수정한 코드
if (event.target.textContent === "") {
event.target.textContent === $turn.textContent;
...
}
참고 : 동등 연산자, 일치 연산자, 동치 비교와 동일성
Javascript에서 style을 직접 변경하는 것을 지양하는 이유
Element.classList
const div = document.createElement("div");
div.clasName = "foo";
// <div class="foo"></div>
console.log(div.outerHTML);
div.classList.remove("foo");
div.classList.add("anotherclass");
// <div class="anotherclass"></div>
console.log(div.outerHTML);
// if "visible" is set remove it, otherwise add it
div.classList.toggle("visible");
// <div class="anotherclass visible"></div>
console.log(div.outerHTML);
// if "foo" is set return true, otherwise return false
console.log(div.classList.contains("foo")); //
// replace class "anotherclass" to "bar"
div.classList.replace("anotherclass","bar");
// <div class="bar visible"></div>
console.log(div.outerHTML);
참고 : CSS 우선순위, Element.classList
// 내 코드
if (!result && clickTime === 9) {
$winner.textContent = 'Draw!';
...
}
// 수정한 코드
const TOTAL_BOXES_NUMBER = 9;
if (!result && clickTime === TOTAL_BOXES_NUMBER) {
$winner.textContent = 'Draw!';
...
}
case style
class명은 kebabcase 사용을 권장함
// 내 코드
<button type="button" class="startButton"></button>
// 수정한 코드
<button type="button" class="start-button"></button>
참고 : casestyle
| 순위 | 의미 | 대표 속성 |
|---|---|---|
| 1 | 레이아웃 | display, visibility, overflow, float, clear, position, top, right, bottom, left, z-index |
| 2 | BOX | width, height, margin, padding, border |
| 3 | 배경 | background |
| 4 | 폰트 | font, color, letter-spacing, text-align, text-decoration, text-indent, vertical-align, white-space |
| 5 | 기타 | 위에 언급하지 않은 나머지 속성들, 기타 속성 내에서 선언 순서 무관함 |
/* 내코드 */
.border {
width: 300px;
height: 300px;
border: 1px solid black;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
}
/* 수정 후 코드 */
.border {
display: grid;
width: 300px;
height: 300px;
border: 1px solid black;
margin: 0 auto;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
}