특수 연산자
JavaScript 다음과 같은 특별한 연산자를 제공합니다.
조건 연산자
조건 연산자는 JavaScript에서 유일하게 세 개의 피연산자를 사용하는 연산자입니다. 연산자는 조건에 따라 둘 중에 하나의 값을 가질 수 있습니다. 문법은 이렇습니다.
condition ? val1 : val2
condition
이 true이면 연산자는 val1
의 값을 갖습니다. 그렇지 않으면 val2
의 값을 갖습니다. 다른 표준 연산자를 사용할 수 있는 곳이면 어디든지 조건 연산자를 사용할 수 있습니다.
status = (age >= 18) ? "adult" : "minor"
이 문장은 age
가 18이거나 더 큰 경우에 status
변수에 "adult"라는 값을 할당합니다. 그렇지 않으면 "minor"라는 값을 할당합니다.
쉼표 연산자
쉼표 연산자(,)는 단순히 피연산자 둘을 모두 평가하고 두 번째 피연산자의 값을 반환하는 연산자입니다. 이 연산자는 주로 for
반복문에서 변수 여러 개가 매번 업데이트 되게 하는데 쓰입니다.
예를 들어 a
가 각각 10줄의 원소를 가지는 2차원 배열일 때, 다음 코드에서는 변수 두 개를 한 번에 바꾸기 위해서 쉼표 연산자를 사용하고 있습니다. 이 코드는 배열의 대각선 원소를 출력합니다.
for (var i=0, j=9; i <= 9; i++, j--) document.writeln("a["+i+"]["+j+"]= " + a[i][j])
delete
delete는 개체(object), 개체의 속성(property), 배열의 특정 인덱스에 있는 원소(element)를 지우는 연산자입니다. 문법은 이렇습니다.
delete objectName delete objectName.property delete objectName[index] delete property // with 문장 안에서만 유효합니다
objectName
은 개체 이름이고, property
는 개체에 존재하는 속성이고, index
는 배열의 원소 위치를 나타내는 정수입니다.
네 번째 형식은 개체의 속성을 지우는 코드인데, with
문장 안에서만 사용할 수 있습니다.
암시적으로 선언된 변수를 지울 때는 delete
연산자를 사용할 수 있지만 var
문장을 이용해서 선언된 변수는 지울 수 없습니다.
delete
연산자 실행이 성공하면, 속성이나 원소가 undefined
로 설정됩니다. delete
연산자는 실행이 가능하면 true를 반환하고, 불가능하면 false를 반환합니다.
x=42 var y= 43 myobj=new Number() myobj.h=4 // h라는 속성을 만듭니다 delete x // returns true (암시적으로 선언된 변수는 지울 수 있습니다) delete y // returns false (var로 선언한 변수는 지울 수 없습니다) delete Math.PI // returns false (미리 정의된 속성은 지울 수 없습니다) delete myobj.h // returns true (사용자 정의 속성은 지울 수 있습니다) delete myobj // returns true (암시적으로 선언되었으므로 지울 수 있습니다)
배열의 원소를 지우기
배열의 원소를 지울 때, 배열의 길이에는 변화가 없습니다. 예를 들어, a[3], a[4]를 지우더라도 a[4]와 a[3]은 여전히 정의되지 않습니다.
delete
연산자가 배열 원소를 제거할 때 원소는 더이상 배열에 존재하지 않습니다. 아래 예제에서 trees[3]은 delete
로 제거되었습니다.
trees=new Array("redwood","bay","cedar","oak","maple") delete trees[3] if (3 in trees) { // 이 블록은 실행되지 않습니다. }
배열 원소가 존재하긴 하지만 정의되지 않은 값을 가지도록 하고 싶다면 delete
연산자 대신 undefined
키워드를 사용하십시오. 다음 예제에서 trees[3]
에 undefined
값을 할당했지만 배열 요소는 여전히 존재합니다.
trees=new Array("redwood","bay","cedar","oak","maple") trees[3]=undefined if (3 in trees) { // 이 블록은 실행됩니다. }
in
in
연산자는 지정된 속성이 지정된 개체에 있으면 true를 반환합니다. 문법은 이렇습니다.
propNameOrNumber in objectName
propNameOrNumber
은 속성 이름을 나타내는 문자열이나 배열 인덱스를 나타내는 수이고, objectName
은 개체 이름입니다.
다음 예제는 in
연산자의 몇 가지 사용법을 보여줍니다.
// 배열 trees=new Array("redwood","bay","cedar","oak","maple") 0 in trees // returns true 3 in trees // returns true 6 in trees // returns false "bay" in trees // returns false (원하는 인덱스를 지정해야 하는데, // 그 인덱스에 있는 값을 지정하면 안됩니다.) "length" in trees // returns true (length는 배열의 속성입니다.) // 미리 정의된 개체 "PI" in Math // returns true myString=new String("coral") "length" in myString // returns true // 사용자 개체 mycar = {make:"Honda",model:"Accord",year:1998} "make" in mycar // returns true "model" in mycar // returns true
instanceof
instanceof
는 지정된 개체가 지정된 개체 형식이면 true를 반환합니다. 문법은 이렇습니다.
objectName instanceof objectType
objectName
은 objectType
과 비교할 개체의 이름이고, objectType
은 개체 형식으로 Date
나 Array
같은 것입니다.
실행중에 개체의 형식을 알고 싶으면 instanceof
를 사용하면 됩니다. 예를 들어 예외를 처리할 때, 발생한 예외의 형식에 따라 서로 다른 예외 처리 코드를 실행할 수 있습니다.
다음 코드에서 theDay
가 Date
개체인지 결정하기 위해서 instanceof
를 사용합니다. theDay
는 Date
개체이기 때문에 if
문 안에 있는 문장이 실행됩니다.
theDay=new Date(1995, 12, 17) if (theDay instanceof Date) { // 실행할 문장 }
new
사용자 정의 개체 형식이나 Array, Boolean, Date, Function, Image, Number, Object, Option, RegExp, String
같이 미리 정의된 개체 형식의 인스턴스를 만들 때 new
연산자를 사용합니다. 서버에서는 DbPool, Lock, File, SendMail
등을 만들 때 사용할 수 있습니다. new
는 다음과 같이 사용합니다.
objectName = new objectType ( param1 [,param2] ...[,paramN] )
개체 초기화 지정자 사용하기에 설명한 것처럼 개체 초기화 지정자를 이용해서 개체를 만들 수도 있습니다.
더 많은 정보를 얻으려면 JavaScript 레퍼런스의 new 연산자 페이지를 보시기 바랍니다.
this
현재 개체를 참조할 때 this
키워드를 사용합니다. 일반적으로 this
는 메소드를 호출하는 개체를 참조합니다. 다음과 같이 사용하면 됩니다.
this[.propertyName]
예제 1.
개체의 value
속성이 높거나 낮은 값을 가지는지 검증하는 validate
라는 함수가 있다고 가정합시다.
function validate(obj, lowval, hival) { if ((obj.value < lowval) || (obj.value > hival)) alert("Invalid Value!") }
이제 우리는 폼의 각 요소의 onChange
이벤트 핸들러에서 validate
함수를 호출하면서, this
를 이용하여 스스로를 함수에 전달할 수 있습니다.
<B>Enter a number between 18 and 99:</B> <INPUT TYPE = "text" NAME = "age" SIZE = 3 onChange="validate(this, 18, 99)">
예제 2.
form
속성과 결합되면, this
는 현재 개체가 포함된 폼을 참조할 수 있습니다. 다음 예제에서 myForm
폼은 Text
개체와 버튼을 포함하고 있습니다. 사용자가 버튼을 클릭하면 Text
개체의 값이 폼 이름으로 설정됩니다. 버튼의 onClick
이벤트 핸들러는 부모 폼인 myForm
을 참조하기 위해서 this.form
을 사용하고 있습니다.
<FORM NAME="myForm"> Form name:<INPUT TYPE="text" NAME="text1" VALUE="Beluga"> <P> <INPUT NAME="button1" TYPE="button" VALUE="Show Form Name" onClick="this.form.text1.value=this.form.name"> </FORM>
typeof
typeof
연산자는 둘 중 한 가지 방법으로 사용할 수 있습니다.
1. typeof operand 2. typeof (operand)
typeof
연산자는 피연산자의 평가되지 않은 형식을 나타내는 문자열을 반환합니다. 피연산자
는 string, variable, keyword, object 등의 타입을 반환하게 됩니다. 괄호는 선택적입니다.
우리가 이런 변수를 정의했다고 해봅시다.
var myFun = new Function("5+2") var shape="round" var size=1 var today=new Date()
typeof
는 이 변수들에 대해서 다음과 같은 결과를 반환할 것입니다.
typeof myFun is function typeof shape is string typeof size is number typeof today is object typeof dontExist is undefined
true
와 null
키워드에 대해서 typeof
연산자는 다음과 같은 결과를 반환합니다.
typeof true is boolean typeof null is object
수와 문자열에 대해서 typeof
연산자는 다음과 같은 결과를 반환합니다.
typeof 62 is number typeof 'Hello world' is string
속성 값에 대해서 typeof
연산자는 속성이 포함하고 있는 값의 형식을 반환합니다.
typeof document.lastModified is string typeof window.length is number typeof Math.LN2 is number
메소드와 함수에 사용하면 typeof
연산자는 다음과 같은 결과를 반환합니다.
typeof blur is function typeof eval is function typeof parseInt is function typeof shape.split is function
미리 정의된 개체들에 대해서 typeof
연산자는 다음과 같은 결과를 반환합니다.
typeof Date is function typeof Function is function typeof Math is function typeof Option is function typeof String is function
void
void
연산자는 다음과 같이 사용할 수 있습니다.
1. void (expression) 2. void expression
void
연산자는 표현식이 값을 반환하지 않으면서 평가되어야 한다고 지정하는데 사용됩니다. expression
은 평가하려는 JavaScript 표현식입니다. 표현식을 감싸는 괄호는 선택적이지만 사용하는 쪽이 더 좋은 스타일입니다.
표현식을 하이퍼텍스트 링크로 지정하기 위해서 void
연산자를 사용할 수 있습니다. 표현식이 평가되기는 하지만 현재 문서 대신 로드되지는 않습니다.
아래 코드는 사용자가 클릭할 때 아무 동작도 하지 않는 하이퍼텍스트 링크를 만듭니다. 사용자가 링크를 클릭하면 void(0)
는 정의되지 않은 것(undefined)으로 평가되고 JavaScript에서 아무런 효과가 없습니다.
<A HREF="javascript:void(0)">Click here to do nothing</A>
다음 코드는 클릭하면 폼을 제출하는 하이퍼텍스트 링크를 만듭니다.
<A HREF="javascript:void(document.form.submit())"> Click here to submit</A>