데이터 복사, 전달 및 비교
업데이트: 2007년 11월
JScript에서 데이터를 복사, 전달 및 비교하는 방식은 데이터가 저장된 방법에 따라 다르며, 데이터 저장 방식은 데이터 형식에 따라 다릅니다. JScript에서는 데이터를 값으로 또는 참조로 저장합니다.
값으로 처리와 참조로 처리
JScript에서 숫자와 부울 값(true와 false)은 값으로 복사, 전달 및 비교됩니다. 이 과정에서 컴퓨터의 메모리 공간이 할당되며 원래 값을 이 공간에 복사합니다. 원래 값과 복사 값은 별개의 엔터티이므로 어느 하나가 변경되어도 다른 하나에 영향을 주지 않습니다. 두 개의 숫자 또는 부울 값은 동일한 값을 가지면 같은 것으로 간주합니다.
JScript에서 개체, 배열 및 함수는 참조로 복사, 전달 및 비교됩니다. 이 과정에서는 기본적으로 원래 항목에 대한 참조를 만들어 그 참조를 복사 값처럼 사용합니다. 원래 값과 복사 값 중 어느 하나가 변경되면 두 값이 모두 달라집니다. 실제로는 한 개의 엔터티만 있는 것이며, 복사 값은 데이터에 대한 또 하나의 참조에 불과합니다.
두 변수를 참조로 비교하려면 완전히 동일한 엔터티를 참조해야 합니다. 예를 들어, 별개의 두 Array 개체는 동일한 요소를 포함하더라도 항상 동일하지 않은 것으로 비교됩니다. 제대로 비교하려면 변수 중 하나가 다른 하나에 대한 참조라야 합니다. 두 Array가 동일한 요소를 갖는지 확인하려면 toString() 메서드의 결과를 비교합니다.
마지막으로, JScript에서는 문자열이 참조로 복사되고 전달됩니다. 문자열을 비교하는 방법은 문자열이 개체인지 여부에 따라 결정됩니다. new String("something")을 사용하여 만든 두 개의 String 개체는 참조로 비교됩니다. 두 문자열 중 하나 또는 두 문자열이 모두 리터럴이거나 기본 문자열 값인 경우에는 값으로 비교됩니다. 자세한 내용은 JScript 할당 및 같음 연산자를 참조하십시오.
참고: |
---|
ASCII 문자와 ANSI 문자 집합은 대문자가 소문자보다 순서상 우선하도록 구성되어 있습니다. 예를 들어, "Zoo"가 "aardvark"보다 앞에 옵니다. 대소문자를 구분하려면 두 문자열에 toUpperCase() 또는 toLowerCase()를 호출합니다. |
함수 매개 변수
JScript에서 매개 변수를 값으로 함수에 전달하면 함수 안에서만 존재하는 별도의 매개 변수 복사본을 만들게 됩니다. 개체와 배열을 참조로 전달하더라도 함수에서 새 값으로 직접 덮어쓰면 새 값은 함수 외부에 반영되지 않습니다. 개체 속성 또는 배열 요소에 대한 변경 내용만 함수 외부에 표시됩니다.
예를 들어, 다음 프로그램에는 두 개의 함수가 있습니다. 첫 번째 함수는 입력 매개 변수를 덮어써서 매개 변수를 변경하더라도 원래 입력 인수에는 영향을 주지 않습니다. 두 번째 함수에서는 개체를 덮어쓰지 않고 개체의 속성을 변경합니다.
function clobber(param) {
// Overwrite the parameter; this will not be seen in the calling code
param = new Object();
param.message = "This will not work.";
}
function update(param) {
// Modify the property of the object; this will be seen in the calling code.
param.message = "I was changed.";
}
// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";
// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);
// Call update, and print obj.message.
update(obj);
print(obj.message);
이 코드는 다음과 같이 출력됩니다.
This is the original.
I was changed.
데이터 비교
JScript에서는 데이터를 값 또는 참조로 비교할 수 있습니다. 값으로 테스트를 수행하려면 별개의 두 항목을 비교하여 서로 같은지를 결정합니다. 이러한 비교는 보통 바이트를 단위로 하여 이루어집니다. 참조로 테스트할 때는 두 항목이 같은 항목을 참조하는지 검사합니다. 같은 항목을 참조하면 동일한 것으로 간주되며, 그렇지 않으면 바이트별로 완전히 같은 값을 포함하더라도 서로 다른 것으로 간주됩니다.
문자열은 문자열이 개체인지 여부에 따라 값 또는 참조로 비교될 수 있습니다. 두 문자열이 모두 String 개체이면 참조로 비교되고, 그렇지 않으면 값으로 비교됩니다. 따라서 각각 만들어질 때는 별개로 만들어졌지만 내용이 같은 두 문자열은 같은 것으로 간주됩니다. 두 String 개체의 값을 비교하려면 먼저 toString 또는 valueOf 메서드를 사용하여 개체를 개체가 아닌 문자열로 변환한 다음, 결과 문자열을 비교합니다. 자세한 내용은 JScript 할당 및 같음 연산자를 참조하십시오.