본문 바로가기

언어/javascript

javascript : Object 객체 내장함수

반응형

Objejct 객체에 있는 메서드를 정리하면 다음과 같습니다.

메서드 이름 설명
constructor() 객체의 생성자 함수를 나타냅니다.
hasOwnProperty(name) 객체가 name 속성이 있는지 확인합니다.
isPrototypeof(object) 객체가 object의 프로토타입인지 검사합니다
propertyIsEnumerable(name) 반복문으로 열거할 수 있는지 확인합니다.
toLocaleString() 객체를 호스트 환경에 맞는 언어의 문자열로 바꿉니다.
toString() 객체를 문자열로 바꿉니다.
valueOf() 객체의 값을 나타냅니다.
var obj = { property : 273};

var output ='';

output += "HOP('property') :"+ obj.hasOwnProperty('property') +'\n';
output += "HOP('constructor') :"+obj.hasOwnProperty('constructor')+'\n';
output += "PIE('property') :"+obj.propertyIsEnumerable('property')+'\n';
output += "PIE('constructor') :"+obj.propertyIsEnumerable('constructor')+'\n';
console.log(output);

for(var key in obj){
    console.log(obj[key]);
}
HOP('property') :true
HOP('constructor') :false
PIE('property') :true
PIE('constructor') :false

273

먼저 object에는 property라는 속성은 존재하지만 constructor라는 속성은 존재하지 않는다.

또한 property는 반복문으로는 열거가 가능하지만 constructor는 존재하지않으므로 열거할 수 없다.

 

var object = new Object();

console.log(object);
console.log(object.toString());

var student = {
    name: '윤명월',
    grade: '대학교 1학년',
    toString: function(){
        return this.name + ' : '+ this.grade;
    }
};

console.log(student);
{}
[object Object]
{ name: '윤명월', grade: '대학교 1학년', toString: [Function: toString] }

원래 모든 객체는 toString() 메서드를 갖는데 다시 선언했으므로 재선언한 것입니다. 자바 스크립트는 객체를 문자열로 변환할 때 자동으로 toString() 메서드를 호출한다고 했으므로 그림 8-8 처럼 출력합니다.

 

 

자료형 구분

var numberFromLiteral = 273;
var NumberFromObject = new Number(273);

var output = '';
output += '1. ' + typeof (numberFromLiteral) + '\n';
output += '2. ' + typeof (NumberFromObject);
console.log(output);
1. number
2. object

두 변수 모두 숫자지만 생성자 함수로 만든 숫자는 객체이므로 이러한 결과가 나옵니다.

이러한 특성 때문에 자료형 검사에 문제가 발생합니다.

 

var numberFromLiteral = 273;
var NumberFromObject = new Number(273);


if(typeof (numberFromLiteral) == 'number'){
    console.log('numberFromLiteral을 숫자입니다.');
}

if(typeof(numberFromObject) == 'number'){
    console.log('numberFromObject는 숫자입니다.')
}
numberFromLiteral을 숫자입니다.

두 변수 모두 숫자지만 생성자 함수로 만든 숫자는 객체이므로 경고창을 출력하지 않습니다. 이러한 두 대상을 같은 자료형으로 취급하고 싶을 때는 constructor() 메서드를 사용해야합니다.

 

var numberFromLiteral = 273;
var numberFromObject = new Number(273);


if(numberFromLiteral.constructor == Number){
    console.log('numberFromLiteral을 숫자입니다.');
}

if(numberFromObject.constructor == Number){
    console.log('numberFromObject는 숫자입니다.');
}
numberFromLiteral을 숫자입니다.
numberFromObject는 숫자입니다.

객체의 생성자 함수가 Number 생성자 함수인지 비교하면 쉽게 숫자인지 구분할 수 있습니다. 다른 자료형도 마찬가지입니다.

 

모든 객체에 메서드 추가

 

Object 객체는 모든 자바스크립트 객체의 최상위 객체입니다. 따라서 Objejct 객체의 프로토타입에 속성 또는 메서드를 추가하면 모든 객체에서 활용할 수 있습니다.

 

Object.prototype 객체에 test() 메서드를 추가합니다. 이렇게 메서드를 추가하면 자바스크립트의 모든 객체에 test() 메서드를 사용할 수 있습니다.

 

Object.prototype.test = function(){
    console.log(this);
};

var number = 273;
number.test();
[Number: 273]

 

반응형

'언어 > javascript' 카테고리의 다른 글

javascript : String  (0) 2020.12.15
javascript : Nmuber 객체  (0) 2020.12.15
javascript : 기본자료형  (0) 2020.12.15
javascirpt : 클래스 선언과 속성  (0) 2020.12.15
javascript : prototype, constructor  (0) 2020.12.14