• 회원가입
  • 로그인
  • 구글아이디로 로그인

[js] JS - with 키워드 - 객체 이용해 구문작성 (= with키워드 = 위드키워드)

목차

  1. with 예제 - 객체를 이용해 구문 작성
  2. with 정의
  3. with 구문

※ 폐기예고(Deprecated) 된 키워드이니 사용 금지. !!
※ 전문가들이 사용 금지 권유하는 키워드(eval/with) 중 하나. ㅡㅡ;

 

with 예제 - 객체를 이용해 구문 작성

 

<script>

var obj = {

    site: "홈짱닷컴",

    host: "Homzzang.com",

    open: 2012

}

 

with (obj) {

    console.log(site === "홈짱닷컴"); // true

    console.log(host === "homzzang.com"); // false

    console.log(open === "2012"); // false

    

    // 객체값 재설정

    host = "homzzang.com";

    open = "2012";

    role = "홈페이지 제작관리";    

}

 

console.log(obj.host === "homzzang.com"); // true    

console.log(obj.open === "2012"); // true

console.log(obj.role === "홈페이지 제작관리"); // false

</script>

 

결과보기


PS. 마지막 값이 false인 이유

 

  • host와 open은 원래 객체에 있던 속성인데, role은 with문 안에서 obj 객체에 없던 속성을 선언한 것이기 때문임.
  • with 문은 JavaScript에서 사용을 권장하지 않는 기능 중 하나이며, 코드를 읽기 어렵게 만들고 예상치 못한 동작을 발생시킬 수 있으므로 피하는 것이 좋음. 
  • with 문은 변수를 참조할 때 현재 스코프에 변수가 없으면 전역 스코프에서 변수를 찾으려고 시도함. 따라서 with 문 내에서 role을 선언할 때 실제로는 전역 스코프에 있는 role 변수가 만들어지게 됨.
  • 따라서, obj.role === "홈페이지 제작관리"를 평가할 때, obj 객체 내에 role 속성은 생성되지 않았으므로 전역 스코프에서 role 변수를 찾게 되고, 이 변수는 "홈페이지 제작관리"가 아닌 이전 값으로 남아 있을 것임.
  • 위와 같은 이유로 obj.role === "홈페이지 제작관리"는 false를 반환함. with 문은 코드를 읽기 어렵게 만들고 예기치 못한 부작용을 초래할 수 있으므로 사용을 피하는 것이 좋음. 대신에 명시적으로 객체 속성에 접근하는 것이 권장됨.

 

 

 


with 정의

 

객체를 매개변수로 받아서, 해당 객체를 이용해 다음에 오는 구문에 적용.

 


 

1.

사용폐기 된 코드이니, 사용 금지.

 

2.

MDN with 예제보기
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with

 

 

with 구문

 

with (object) {

    statement;

}


PS. statement가 단일구문일 경우, 중괄호 생략 가능.


[속성값]

 

object

필수. 객체

 



분류 제목
Basic JS - 화살표함수 (Arrow Function) ★★★ (= Arrow함수 = 애로우함수|애로우펑션) (…
Basic JS - rest (나머지 기타등등) 매개변수
HTML_Objects JS - selectedIndex 속성 - 선택된 옵션 색인번호 (= selectedIndex속성 = 실렉…
Object JS - Object Display - 객체 표시(=출력)
Object JS - Object Classes - 객체 클래스
DOM_Element JS - dataset 속성 ★★★ - 데이터셋 속성 (= dataset속성) ※ div태그를 iframe태…
js JS - play(), pause() 메서드 - 동영상 재생/멈춤. (= play메서드, pause메서드 =…
Window_Object JS - devicePixelRatio 속성 ★ - 기기 픽셀 비율. ※ PC, 모바일 구별하기
js JS - 입력값 길이 제한 후, 경고창 띄우기
js JS - 눈 내리는 효과 (Snowflakes effect)
js JS - CSS 다크모드 토글 (Dark Mode Toggle) ※ 클래스 상호 대체/변환
DOM_Style JS - pointerEvents 속성 - 마우스 포인트 이벤트에 대한 반응 여부. (= pointerEve…
js JS - 스크롤 정도/위치 진행바 표시기 (Scroll Indicator Bar)
Form JS - input 태그의 name 속성값이 배열일 때, value값 가져오기 (= 폼태그 안 인풋 태그 네…
js JS - 숫자 (카운팅/변동) 애니 효과
DOM_Event JS - orientationchange 이벤트 - 장치 방향 바뀜 이벤트 (= 오리엔테이션체인지 이벤트) …
ScreenOrientation JS - ScreenOrientation 객체 - 장치 방향 정보 갖는 객체 (= 스크린오리엔테이션 객체)
ScreenOrientation JS - ScreenOrientation.type 속성 - 장치 방향 표시 (= 스크린오리엔테이션타입 속성)
ScreenOrientation JS - ScreenOrientation.angle 속성 - 문서의 현재 방향 각도 반환 (= 스크린오리엔테…
ScreenOrientation JS - ScreenOrientation.onchange 속성 ★ - 장치 방향 변경 이벤트 (= 스크린오리…
63/67
목록
찾아주셔서 감사합니다. Since 2012