라벨이 플밍인 게시물 표시

jsp 안전한 웹 애플리케이션

인증메커니즘 BASIC : 웹 브라우저는 인증창을 통해 사용자명과 비밀번호를 요구하며, 웹 서버에 데이터를 전송한다. DIGEST : 웹 브라우저는 인증창을 통해 사용자명과 비밀번호를 요구하며, 웹서버에 다이제스트 데이터를 전송한다. FROM : 웹 애플리케이션은 브라우저에게 보낸 인증 페이지와 에러 페이지를 제공한다. CLIENT-CERT : 웹 컨테이너는 사용자를 확인하기 위해 SSL을 이용한다. 사용자는 반드시 SSL 인증서를 가지고 있어야 한다.

jsp 서블릿, jsp 라이프사이클

서블릿 1단계: 웹 브라우저의 주소란에 URL을 입력하고 HTTP 요청을 한다. 2단계: 웹 서버는 호출된 서블릿의 정보를 받아서 서블릿이 메모리에 로드되었는지 여부를 확인한다. 3단계: 메모리에 로드되지 않으면, 클래스로더에 의해 서블릿을 메모리에 로드한다. 서블릿 메모리에 이미 로드되어 있으면 6단계로 넘어간다. 4단계: 서블릿 인스턴스를 생성한다. 5단계: init메소드를 호출한다. 6단계: 요청을 처리하기 위한 스레드를 생성후 service메소드를 호출한다. 7,8단계: 스레드로부터 요청에 대한 처리결과를 받아서 웹 브라우저에 HTTP응답을 한다. destroy 메소드는 서블릿 컨테이너에 의해 인스턴스가 소멸전에 호출된다. JSP 1단계: 페이지 번역 2단계: JSP 컴파일 3단계: 클래스로드 4단계: jspInit 메소드 호출 5단계: _jspService 메소드 호출 7단계: jspDestroy 메소드 호출

jsp javamail

Message class abstract String getSubject() - 메일 제목을 리턴한다. Address[] getAllRecipients() - 메일의 모든 수신자 주소를 리턴한다. Folder getFolder() - 메일이 포함된 폴더 객체를 리턴한다. abstract void setSubject(String subject) - 메일 제목을 설정한다. void setFlag(Flags.Flag flag, boolean set) - 메일의 플래그를 설정한다. abstract void setFlages(Flags flag, boolean set) - 메일의 플래그를 설정한다. MimeMessage class MimeMessage(Session session) - 디폴트 MimeMessage 객체를 생성한다. MimeMessage(Session session, InputStream is) - InputStream으로부터 데이터를 읽고, 파싱해서 MimeMessage 객체를 생성한다. void setCountent(Object data, String tyep) - type으로 기술되는 MIME타입의 데이터 Data를 메일의 내용으로 설정한다. void setText(String text) - MIME 타입이 text/plain인 메일 데이터 text를 설정한다. void setText(String text, String charset) - MIME타입이 text/plain이고 문자 세트가 charset인 메일 데이터 text를 설정한다. void setFrom(Address address) - RFC 822의 From 헤더 필드를 설정한다. void setRecipients(Message.RecipientType type, Address[] address) - 메일을 받는 사람의 주소를 설정한다. void setReplyTo(Address[] addresses) - RFC 822의 Reply-To 헤더 필드를 설정한다. void setSentData...

jsp tomcat 설정파일 분석

WEB-INF 분석 /WEB-INF/web.xml - 디플로이먼트 디스크립터라고 불리는 파일이다. 이 파일은 자식이 속한 웹 응용프로그램의 구성에 관련된 정보를 가지고 있다. 이 파일은 DTD를 가지고 있으며, DTD에는 50여개의 태그들이 정의되어 있다. /WEB-INF/classes/* - 서블릿과 유틸리티 클래스들이 있는 디렉토리이다. 이 디렉토리에 있는 클래스들은 응용프로그램의 클래스 로더에 의해 메모리로 로드된다. /WEB-INF/lib/*.jar - 서블릿, 빈, 유틸리티 클래스들을 포함하는 JAR 파일들이 포함되어 있고, 이 파일들은 웹 응용프로그램 클래스 로드에 의해 로드된다. server.xml 파일 - 톰캣의 구조와 톰캣 컴포넌트의 초기 구성 정보를 제공하는 역할을 하는 메인 구성 파일이다. server.xml은 XML 파일이기 때문에 XML 파일의 포맷과 문법을 따른다. Server - server.xml 파일의 최상위의 원소로서 톰캣 서버를 정의한다. Server원소는 Logger와 ContextManager 원소를 포함할 수 있다. Logger - 이 원소는 로거 객체를 정의한다. 각 로거 객체는 이름, 로거 객체의 출력물을 저장할 로그 파일, 로그 레벨을 정의하는 verbosityLevel 속성을 가지고 있다. 현재 서블릿을 위한 로거 객체, jsp 파일을 위한 로거 객체, 톰캣 실행 환경을 위한 로거 객체가 있다. 서블릿의 ServletContext의 log() 메소드의 결과물이 저장되는 로그 파일을 기술한다. ContextManager - 구성과 ContextInterceptor, requestInterceptor, Context, Connector의 구조를 정의한다. 디버깅 레벨, webapps, conf, logs의 기본 디렉토리, working 디렉토리 이름 ContextInterceptor - 톰캣의 시작 및 종료 이벤트를 감시한다. RequestInterceptor - 톰캣이 서비스하는 동안에 다양한 사용자의 요청 단계를 ...

java URLConnetion

void connect() - URL로 기술된 리소스에 연결을 설정한다. boolean getAllowUserInteraction() - 사용자 인터랙션이 허용되는지 알아본다. String getContentEncoding() - 헤더에 포함되어 있는 인코딩 필드의 값을 알아본다. int getContentLength() - 헤더의 content_length 필드 값을 알아보낟. String getContentType() - MIME 타입을 알아본다. long getDate() - 헤더의 data 필드 값을 알아본다. InputStream getInputStream() - 커넥션에서 데이터를 읽기 위한 입렭스트림을 얻는다. long getLastModified() - 헤더의 last-modified 필드 값을 얻어온다. OutputStream getOutputStream() - 커넥션에 데이터를 전달하기 위한 출력 스트림을 얻는다. URL getURL() - URLConnenction의 URL을 얻어온다. boolean getUseCaches() - useCaches 필드 값을 얻어온다. static String guessContenttypeFromStream(InputStream is) - 입력 스트림을 이용해서 MIME 타입을 알아본다. static void setDefaltAllowUserInteraction(boolean defaultallowuserinteraction) - 사용자 인터랙션을 허용할 것인지 여부의 디폴트 값을 설정한다. static void setDefaultRequestProperty(String key, String value) - 일반 요청 속성의 디폴트 값을 설정한다. void setDefaultUseChches(boolean defaultusecaches) - 디폴트로 캐쉬를 사용할 것인지 여부를 설정한다. void setDoInput(boolean doinput) - 원격 객체에서 데이터를 읽어올 것인지 여부를 설정한다. v...

jsp JSTL

주의사항 1. 태그 이름과 문법 TLD에는 속성이 필수인지 옵션 사항인지, 태크가 몸체를 가질 수 있는지, 가진다면 그 안에 들어갈 수 있는 하위 태그는 무었이 있는지, 태그 안에 들어가는 속성 타입은 어떻게 되는지, 속성에 표현식을 쓸 수 있는지 아니면 그냥 문자열만 써야 하는지 등   2. 라이브러리 URI taglib지시자에 바로 이 URI값을 사용합니다. 컨테이너는 이 값으로 웹 어플리케이션에 있는 여러 TLD파일 가운데서 정확한 것으로 찾아갑니다.   TLD <tlib-version></tlib-version> 태그 라이프러리 버전을 선언하는 곳 <short-name></short-name> <function> <name></name> <function-class></function-class> <function-signature></function-signature> </function> <uri></uri> taglib지시자에서 사용할 자신을 나타내는 유일한 이름   <tag> <description></description> <name></name> 태그안에 쓸 이름 <tag-class></tag-class> jsp에서 태그를 사용한 경우 컨테이너가 호출할 클래스 <body-content></body-content> 태그의 몸체 empty : 몸체 없음, scriptless :스크립팅은 올 수 없음, tagdependent : 문자를 무조건 텍스트로 취급, JSP : jsp 안에 들어 갈 수 있ㄴ은 것이라면 무엇이든지 가능. <attribute> 태그의 속성이 있다면 속성을 정의 하는 곳 ...

java 입출력

1.스트림 바이트, 숫자 - 바이트 스트림 문자, 텍스트 - 문자 스트림 바이트 입출력 InputStream -> Java program -> OutputStream 문자 입출력 Reader ->Java program ->Writer 데이터 싱크 스트림 - 데이터를 근원지에서 직접 읽거나, 목적지에 기록하는 클래스들 데이터 프로세싱 스트림 - 다른 스트림을 이용해서 중간에서 어떤 작업을 수행하는 클래스들 InputStream 추상 클래스 바이트 입력스트림을 위한 가상의 상위 클래스로서 System 클래스의 in 멤버 필드가 InputStream 타입이다. int read() - 입력 스트립에서 한 바이트를 읽어서 리턴한다. 일어오는 값은 바이트인데 리턴 타입은 int 타입으로 선언되어 있다. 읽어온 값은 0~255사이의 값, 더 읽은 값이 없는 경우 -1을 리턴한다. int read(byte[] b, int off, int len) - 입력 스트림에서 len 개의 바이트를 일어서 바이트 배열 b에 저장한다. 배열 b의 off 인덱스에서부터 저장한다. 즉 첫 번째 바이트를 읽어서 b[off]에 저장한다. 더이상 읽을 값이 없는 경우 -1을 리턴한다. int read(byte[] b) - 배열의 크기만큼 읽어온다. 리턴 값은 읽은 바이트 수이다. 더 이상 읽을 값이 없는 경우에는 -1을 리턴한다. PrintStream 클래스 PrintStream(OutputStream out, boolean autoFlush) - PrintStream 객체를 생성한다. autoFlush 값이 true이면 println() 메소드가 호출되거나, print("\n")이 호출되면 바이트 버퍼를 자동적으로 플러쉬한다. PrintStream(OutputSteam out) - autoFlush가 false인 PrintStream객체를 생성한다. void close() - 스트림을 닫는다. void flush() - 버퍼 내용을 플러쉬한다. void p...

jsp HttpServletResponse

void addCookie(Cookie cookie) - 응답에 쿠키를 추가한다. boolean containsHeader(String name) - 응답 헤더에 주어진 필드가 포함되었는지 여부를 알려준다. void sendError(int sc) - 클라이언트에 상태 코드와 디폴트 메시지를 전송한다. void sendError(int sc, String msg) - 클라이언트에 상태 코드와 메시지를 전송한다. String encodeRedirectURL(String url) - URL을 인코딩해준다. void setHeader(String name, String value) - 응답 헤더에 필드와 값을 추가한다. void setIntHeader(String name, int value) - 헤더 필드에 주어진 이름과 정수 값을 설정한다. void setStatus(int sc) - 응답에 상태 코드를 설정한다.

jsp ServletResponse

void flushBuffer() - 버퍼에 있는 내용을 클라이언트에 전송한다. int getBufferSize() - 응답에 사용되는 버퍼의 크기를 알아본다. String getCharacterEncoding() - 응답에 사용된 문자 세트의 인코딩을 리턴한다. Locale getLocale() - 응답에 사용된 로케일을 리턴한다. ServletOutputStream getOutputStream() - 응답에 바이너리 데이터를 전송하기 위해 출력 스트림을 얻는다. PrintWriter getWriter() - 응답에 문자 데이터를 전송하기 위해 PrintWriter를 얻는다. boolean isCommitted() - 응답이 committed되었는지 여부를 리턴한다. void reset() - 버퍼에 있는 데이터를 지운다. void setBufferSize(int size) - 버퍼 크기를 size로 지정한다. void setContentLength(int len) - 클라이언트로 전달되는 내용의 크기를 len으로 설정한다. void setContentType(String type) - 클라이언트로 전달되는 내용의 MIME타입을 설정한다. void setLocale(Locale loc) - 로케일을 설정한다.

jsp HttpServletRequest

String getAuthType() - 서버가 사용하는 인증 이름을 리턴한다. Cookie[] getCookies() - 브라우저가 요청과 전달한 쿠키들을 얻어온다. String getHeader(String name) - 주어진 이름의 요청 헤더 값을 얻어온다. Enumeration getHeaderNames() - 요청에 포함된 모든 헤더 이름들을 얻어 온다. String getMethod() - HTTP의 명령어 이름을 얻어온다. String getPathInfo() - URL에서 추가적인 패스 정보를 얻어온다. String getPathTranslated() - 서블릿 이름에서부터 쿼리 스트링전까지의 추가적인 패스 정보를 얻는다. String getQueryString() - 쿼리 스트링을 얻어온다. String getRemoteUser() - HTTP 인증을 통해 로그인 한 사용자의 이름을 얻어온다. String getRequestedSessionId() - 클라이인트의 세션 ID를 얻어온다. String getRequestURI() - URI 값을 얻어온다. HttpSession getSession() - 현재 세션을 리턴한다. HttpSession getSession(boolean create) - 현재 세션을 리턴하거나, 없는 경우에 create가 true이면 새로운 세션을 생성한다. boolean isRequestedSessionValid() - 세션이 유효한가를 알아본다.

jsp ServletRequest

Object getAttribute(String name) - 주어진 이름의 어프리뷰트를 얻어온다. 설정된 어트리뷰트가 없으면 null 값을 리턴한다. Enumeration getAttributeNames() - 설정된 모든 어트리뷰터의 이름을 리턴한다. void removeAttribute(String name) - 주어진 이름의 어트리뷰트를ㄹ 제거한다. void setAttribute(String name, Object o) - 객체를 주어진 이름으로 어트리뷰트에 등록한다. RequestDispacher getRequestDispatcher(String path) - 주어진 패스로 클라이언트의 요청을 전달할 RequestDispatcher를 얻어온다.   int getContentLength() - 클라이언트 요청의 바디(body)부분의 길이를 바이트 단위로 리턴한다. 길이를 알 수 없으면 -1을 리턴한다. String getContentType() - 클라이언트 요청의 바디 부분의 MIME 타입을 기술한다. String getParameter(String name) - 클라이언트의 요청에 포함되어 있는 주어진 이름의 파라메터 값을 리턴한다. 값이 없을 경우에는 null을 리턴한다. String[] getParameterValues(String name) - 주어진 이름의 파라메터 값을 모두 리턴한다. 동일한 이름에 여러 개의 값이 있는 경우에 사용된다. ServletInputStream getInputStream() - 클라이언트 요청의 바디에 있는 바이너리 데이터를 읽기 위한 입력 스트림을 리턴한다. BufferedReader getReader() - 클라이언트 요청의 바디에 있는 문자 데이터를 읽기 위한 BufferedReader를 리턴한다. String getCharacterEncoding() - 문자 데이터의 인코딩을 리턴한다. Locale getLocale() - 클라이언트가 받을 수 있는 가...

Collection

Collection: 가장 상위 인터페이스이다. Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스이다. SortedSet : 오름차순을 갖는 Set 인터페이스이다. List : 순서가 있는 집합을 처리하기 위한 인터페이스이기 때문에 인덱스가 있어 위치를 지정하여 값을 찾을 수 있다. 중복을 허용하며, List 인터페이스를 상속받는 클래스 중에 가장 많이 사용하는 것으로 Vector가 있다. Queue : 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스이다. 기본적으로 FIFO를 따른다. Map : Map은 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스이다. 이 객체는 중복되는 키를 허용하지 않는다. SortedMap : 키를 오름차순으로 정렬하는 Map 인터페이스이다. Set HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장된다. TreeSet : red-black이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다. HashSet보다 성능상 느리다. 데이터를 담으면서 동시에 정렬할 때 유용하다. LinkedHashSet : 해쉬 테이블에 데이터를 담는데, 저장된 순서에 따라서 순서가 결정된다. List Vector : 크기를 객체 생성시 지정할 필요가 없는 배열 클래스이다. ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않다. LinkedList : ArrayList와 동일 하지만, Queue 인터페이스를 구현했기 때문에 FIFO큐 작업을 수행한다. Map Hashtable : 데이터를 해쉬 테이블에 담는 클래스이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이 클래스를 사용하기 바란다. TreeMap : red-black 트리에 데이터를 담는다. TreeSet과 다른 점은 키에 의해서 순서가 정해진다는 것이다. LinkedHashMap : HashMap과 거의 동일하며 이중 연결 리스트라는 방식을 사...

javascript 정규표현식

 문자  매치되는 것  알파벳 문자와 숫자 조합  같은 조합의 문자들  \0  널문자(\u0000)  \t  탭(\u0009)  \n  줄바꿈(\u000a)  \v  수직 탭(\u000b)  \f  폼 피드(\u000c)  \r  캐리지 리턴(\u000d)  \xnn  16진수 nn에 해당하는 라틴 문자  \uxxxx  16진수xxxx에 해당하는 Unicode문자  \cX  제어 문자 ^C  문자  매치되는 것  [...]  대괄호 안에 있는 문자  [^...]  대괄호 안에 없는 문자  .  줄바꿈이나 Unicode 줄마침 문자를 제외한 아무 문자  \w  ASCII 문자  \W  ASCII 문자가 아닌 문자  \s  Unicode 공백 문자  \S  Unicode 공백 문자가 아닌 문자  \d  ASCII 숫자  \D  ASCII 숫자가 아닌 문자  [\b]  백스페이스  문자  의미  {n,m}  앞의 항목이 적어도 n번 이상 나타나고, m 번보다는 적게 나타난다.  {n,}  앞의 항목이 적어도 n번 이상 나타난다.  {n}  앞의 항목이 정확히 n번 나타난다.  ?  앞의 항목이 0또는 한번 나타난다.  +  앞의 항목이 한 번 이상 나타난다는 것을 의미한다.  *  앞의 항목이 0번 이상 나타난다는 것을 의미한다.  문자  의미  |  대체. 왼쪽이나 오른쪽의 부분 표현식을 매치시킨다.  (...)...

javascript 모듈

규칙 만약 모듈이 전역 네임스페이스에 심벌을 추가한다면, 문서에 그 심벌이 무엇인지 명확하게 기술되어야 한다. 만약 모듈이 전역 네인스페이스에 심벌을 추가한다면, 그 심벌의 이름과 모듈이 작성되어 있는 파일 이름 간에 명확한 관계가 있어야 한다.

javascript

Closures JavaScript 에서 이러한 public, private, privileged 멤버들의 구현이 가능한 것은, closure 때문이다. closure 의 의미는(Javascript의 closure 구현이 시사하는 바는), inner function 은 outer function 의 var 선언 변수와 매개변수에 접근할 수 있으며, 심지어 outer function 이 리턴된 이후에도 가능하다는 뜻이다. 이는 굉장히 강력한 언어 속성인데, JavaScript 에서 어떻게 이것이 가능한지 파헤쳐놓은 책은 아직은 없다. 대부분 아예 언급할 생각조차 없는 것 같다. private 과 privileged 멤버는 object 가 생성될 때에만 만들 수 있다. 반면, public 멤버는 언제든 만들 수 있다. Patterns Public function Constructor(...) {     this.membername = value; } Constructor.prototype.membername = value; Private function Constructor(...) {     var that = this;     var membername = value;     function membername(...) {...} } Note: function 구문 function membername(...) {...} 은 var membername = function(...) {...}; 표현의 축약이다. Privileged function Constructor(...) {     this.membername = function (...) {...}; } (원 문에) Copyright 2001 Douglas Crockford. All Rights Reserved Wrrrldwide.

javascript 모조클래스

생성자 function Rectangle(w,h){ this.width=w; this.height=h; } var rect1= new Rectagle(2,4); //rect1={width:2,height:4} 생성자 함수에는 일반적으로 반환값이 없다. 다시 말해, 생성자 함수는 this키워드가 가리키는 객체를 초기화시킬 뿐 아무런 값도 반환하지 않는다. 하지만 생성자 함수에서 결과값으로 객체를 반환하면 반환값을 가질 수 있으며, 이때 반환되는 객체는 new 문장의 결과값이 된다. 그리고 생성자 안의 this가 가리키고 있던 객체는 페기도니다. 프로토타입과 상속 자바스크립트의 모든 객체는 프로토타입이라고 불리는 또 다른 객체를 내부적으로 참조할 수 있다. 그리고 객체는 프로토타입의 프로퍼티들을 자신의 프로퍼티로 가져온다. 다시 말해 자바스크립트의 객체는 자신의 프로토타입에 있는 프로퍼티를 상속받는다. function Rectangle(w,h){ this.width=w; this.height=h; } Rectangle.prototype.area=function(){return this.width * this.height;} 상속받은 프로퍼티의 읽기와 쓰기 읽을때 객체에 프로퍼티가 없으면 프로토타입 객체에 프로퍼티를 검사한다. 쓸때는 프로토타입을 검사하지 않는다. 객체에 해당 프로퍼티가 없으면 그 프로퍼티를 만든다. 내장형 타입의 확장 프로토타입을 사용하면 내장객체의 프러퍼티를 만들수 있다. 하지만 좋은 방법은 아니다. 내장형 네이티브 클래스의 프로토타입을 확장하는 것이 안전하고 유용하다. 자바스크립트의 클래스 시뮬레이션 자바나 C++ 자바스크립트간의 비교 자바스크립트의 객체는 프로퍼티의 개수에 제한이 없으며, 동적으로 추가할 수도 있다. 자바나 C++에서 클래스는 객체의 구조를 정의한다. 인스턴스 프로퍼티 인스턴스 메서드 클래스 프로퍼티 클래스 메소드 공통적인 객체 메서드 toString()메서드 valuOf()메서드 비교메서드  a<b  a...

javascript Function() 생성자

Function()생성자를 사용하면 실행시점에 자바스크립트 코드를 동적으로 생성하고 컴파일할 수 있다. 이러한 점에서 Function() 생성자는 전역 함수인 eval() 함수와 유사하다. Function()생성자는 호출될 때마다 함수 몸체를 파싱하고 새로운 함수 객체를 생성한다. 따라서 만약 생성자 호출이 루프안이나 자주 호출되는 함수 안에서 이루어진다면, 이러한 작업은 비효율적일 수 있다. 반면에 루프와 함수안의 함수 리터럴이나 중첩된 함수는 그것이 나타날 때마다 매번 다시 컴파일되지 않는다. 또한 함수 리터럴이 나타날 때마다 생성되는 함수는 서로 다른 함수 객체가 생성된 것이 아니다. 끝으로 Function()생성자의 가장 중요한 점은 생성된 함수가 어휘적 유효범위를 사용하지 않는다는 것이다. 대신 Function()생성자에 의해 생성된 함수는 다음 코드에서 확인할 수 있듯이 마치 최상위 레벨의 함수인 것처럼 컴파일된다.

자바스크립트 문장 문법

 문장  문법  용도  break  break;  bread 레이블;  가장 안쪽의 루프, switch문, 또는 '레이블'로 명명된 문장에서 빠져나온다.  case  case 표현식:  switch 문 내부의 문장에 레이블을 붙인다.  continue  continue;  continue 레이블;  가장 안쪽의 루프, 또는 '레이블'로 명명된 루프를 재시작한다.  default  default;  switch 문에서 디폴트 문장에 레이블을 붙인다.  do/while  do   문장  while(표현식);  while 루프를 만드는 다른 방법  empty  ;  아무일도 안함  for  for(초기화; 테스트; 증가)   문장  편리하게 쓸 수 있는 루프  for/in  for(변수 in 객체)   문장  객체에 속한 프로퍼티들에 대한 루프를 돈다.  function  function 함수 이름 ([전달인자1 [..., 전달인자 n]) {   문장 }  함수를 선언한다.  if/else  if(표현식)   문장1 [else 문장2]  조건부 코드 실행  label  식별자: 문장  '문장'에 '식별자'라는 이름을 붙인다.  return  return[표현식]  함수를 반환한다. 또는 함수를 '표현식'의 값으로 반환한다.  switch  switch(표현식){   문장  }  case 또는 default: 로 레이블이 붙은 문장들로 다중 분기  throw  throw 표현식;  예...

javascript ===, ==, >=, <=연산자

=== 연산자가 두 값이 일치하는지 아닌지 판단하는 데에는 다음과 같은 규칙들을 따른다. 두 값의 타입이 다르다면 두 값은 일치하지 않는다. 두 값이 모두 숫자이고 값이 같다면 두 값은 일치한다. 단, 적어도 하나의 값이 NaN일 경우 두 값은 일치하지 않는다. NaN값은 어느 값과도 일치하지 않는다. 어떤값이 NaN인지 확인하려면 전역 함수인 isNaN()을 사용하라. 두 값이 모두 문자열이고 같은 위치에 정확히 같은 문자들을 갖고 있다면 두 값이 일치한다. 만일 문자열의 길이나 내용이 다른 경우 두 값은 일치하지 않는다. 몇몇 경우 Unicode 표준에서 한 문자열을 인코딩 하는 방법이 두 가지 이상일 수 있음을 유의하라. 하지만 자바스크립트에서 효율성을 위해 엄격히 문자 대 문자 비교의 원칙으로 문자열을 비교하며, 모든 문자열은 비교되기 이전에 '정규 형식'으로 변환되어 있다고 가정한다. 두 값이 모두 불리언 값 true인 경우, 또는 두 값이 모두 불리언 값 false인 경우, 두 값은 일치한다. 두 값이 같은 객체, 배열 또는 함수를 참조할 경우 두 값이 일치한다. 만일 두 값이 서로 별개의 객체를 참조할 경우 두 값은 일치하지 않는다. 설사 두 객체의 프로퍼티가 일치하거나 두 배열의 원소가 일치한다고 하더라고 마찬가지다. 두 값이 모두 null일 경우, 또는 두 값이 모두 undefined일 경우, 두 값은 일치한다. == 연산자가 두 값이 동등한지 아닌지 판단하는 데에는 다음의 규칙들을 따른다. 두 값의 타입이 같은 경우 두 값이 일치하는지 테스트 한다. 두 값이 일치할 경우 그 둘은 동등하다. 두 값이 일치하지 않는 경우 동등하지 않다. 두 값의 타입이 다른 경우라 할지라도 동등할 여지가 있다. 동등함을 확인하는 과정에는 다음 규칙과 타입 변환이 사용된다. 두 값 중에 하나가 null이고 다른 하나가 undefined라면 두 값은 동등하다. 한 값이 숫자이고 다른 하나는문자열이면, 문자열을 숫자로 변환한 ...

javascript 연산자 우선순위

 P  A  연산자  피연산자 타입  수행되는 연산  15  L  .  객체, 식별자  프로퍼티 접근    L  []  배열, 숫자  배열 인덱스    L  ()  함수, 전달인자  함수 호출    R  NEW  생성자 호출  새 객체 생성  14  R  ++  좌변값  전치 후치 증가    R  --  좌변값  전치 후치 감소    R  -  숫자  단항 마이너스    R  +  숫자  단항 플러스    R  ~  정수  비트 단위 NOT    R  !  불리언  논리 NOT    R  delete  좌변값  프로퍼티 정의를 무효화    R  typeof  타입 무방  데이터 타입을 반환    R  void  타입 무방  undefined 값을 반환  13  L  *,/,%  숫자  곱하기, 나누기, 나머지  12  L  +,-  숫자  더하기 빼기    L  +  문자열  문자열 이어 붙이기  11  L  <<  숫자  왼쪽으로 이동    L  >>  숫자  부호비트를 ...