javascript

인턴의 첫번째 과제 코드 리뷰

2021. 9. 10. 17:01
728x90
반응형

이번 수요일, 첫 과제를 받았다.

 

과제 내용은 다음과 같다.

 

1. 내가 원하는 요소를 리턴받는 getEle 함수를 구현하시오

조건

- id는 #id

- class는 .class

- 없으면 그냥 tag를 return받음 "div"

- html collection으로 받을지 nodelist 로 받을지 파라메터 추가(live, static)

 

2. 내가 원하는 요소를 생성해서 리턴해주는 함수

조건

- 파라메터는 오브젝트 하나만 받는다.

- id, class, 속성 들이 다 추가되어서 return받는다.

 

내가 작성한 코드

// 1번
const select = function (selector, option) {
const cleanedSelector = selector.substring(1, selector.length);
//동적
if (option === "live") {
if (selector[0] === "#") {
return document.getElementById(cleanedSelector);
} else if (selector[0] === ".") {
return document.getElementsByClassName(cleanedSelector);
} else {
return document.getElementsByTagName(selector);
}
//정적
} else if (option === "static") {
return document.querySelectorAll(selector);
}
else {
throw new Error("wrong option! option must be 'live' or 'static'");
}
};
const getEle = function (selector, option = "live") {
if (selector !== "undefined") {
if (typeof selector === "string" && typeof option == "string") {
if (selector !== "") {
return select(selector, option);
} else {
throw new Error("selector is empty");
}
} else {
throw new Error("All parameter must be a string");
}
} else {
throw new Error("selector is undefined");
}
};
// 2번
const create = function (obj) {
var ele = document.createElement(obj.tagName);
var trueAttribute = ["checked", "disabled", "hidden", "multiple"];
// attribute의 value값이 string이 아니면 ( ex_obj... ) 에러
for (attribute in obj) {
if (typeof obj[attribute] !== "string") {
throw new Error("attribute value must be a string")
} else if (attribute !== "tagName") {
//innerHTML을 넣어줌
if (attribute === "innerHTML") {
ele.innerHTML = obj[attribute];
} else if (trueAttribute.indexOf(attribute) !== -1) {
if (obj[attribute] === true || obj[attribute] === "true") {
ele.setAttribute(attribute, obj[attribute]);
}
} else {
ele.setAttribute(attribute, obj[attribute]);
}
const createEle = function (obj) {
if (obj) {
// obj가 {}인 경우
if (Object.keys(obj).length !== 0) {
if (typeof obj === "object") {
//obj.constructor.toString().split(" ")[1]==="Array()";
if (Array.isArray(obj)) {
throw new Error("it is array. parameter must be an object");
} else {
return create(obj);
}
return obj;
} else {
throw new Error("parameter must be an object");
}
} else {
throw new Error("empty object");
}
} else {
throw new Error("no parameter");
}
};

 

그리고 내가 생각하지 못했던 부분에서 몇가지 고칠 점이 있어서 정리해 봤다.

  1. else는 웬만하면 쓰지 마라 -> exception이 많이 발생
  2. 같은 코드여도 보기 편하게 case를 나눠라

querySelectorAll은 #일때 .일때 상관없이 전부 querySelectorAll("#div")같은 형식으로 접근할 수 있어서 한 줄로 끝냈다. 그런데 오히려 querySelectorAll을 잘 모르는 다른사람이 읽었을때를 생각해서 if else로 나누는게 좋다고 한다.

else if (option === "static") {
// # 이나 . 일때
return document.querySelectorAll(selector);

 

↓

3. 한함수에서만 쓰는 함수면 내부함수로 쓰기

  • 호출할때만 메모리에 올리니까 효율적임

위에서 나는 create 함수와 createEle함수를 나누었다.

하지만 create는 어차피 createEle함수에서만 사용하므로 createEle() 안에 create()를 정의하는 것이 좋다

 

 

4. undefined비교할때 typeof쓰기

 

if (selector !== "undefined")

 

                   ↓

 

if (typeof selector !== "undefined")

 

5. 데이터의 구조를 잘 생각해라

select하기 쉽도록 만들자.

obj = [{
tagName : ""
attribute : {
class : ""
id : ""
}
},
{
tagName : ""
attribute : {
class : ""
id : ""
}
}]
728x90
반응형

'javascript' 카테고리의 다른 글

[javascript] object에서 key값에 접근할 때 오류, object[" "]형식으로 접근하기  (0) 2021.10.22
JavaScript Closures MDN 예제 해석  (0) 2021.09.10
JavaScript closure 개념  (0) 2021.09.10
function과 function()의 차이, onclikc=function과 onclick=function()의 차이  (0) 2021.08.19
IE에서 download attribute 사용하기  (0) 2021.07.26
'javascript' 카테고리의 다른 글
  • JavaScript Closures MDN 예제 해석
  • JavaScript closure 개념
  • function과 function()의 차이, onclikc=function과 onclick=function()의 차이
  • IE에서 download attribute 사용하기
우주유령
우주유령
우주우주유령 님의 블로그입니다.
우주유령
우주
우주유령
전체
오늘
어제
반응형
  • 분류 전체보기 (131)
    • javascript (28)
    • java (26)
    • Web (16)
    • React (7)
    • SQL (2)
    • Spring (20)
    • IntelliJ (6)
    • JSP (1)
    • Notion (1)
    • VScode (8)
    • Vue (3)
    • css (1)
    • tistory (1)
    • jpa (8)
    • 책 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

최근 글

hELLO · Designed By 정상우.
우주유령
인턴의 첫번째 과제 코드 리뷰
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.