- 무명의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다.
- 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
- 함수의 매개변수에 전달할 수 있다.
- 함수의 반환값으로 사용할 수 있다.
👉 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미.
arguments, caller, length, name, prototype 프로퍼티
arguments 객체는 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다.
ex)
function sum(){
let res = 0;
for(let i = 0; i < arguments.length; i++){
res += arguments[i];
}
return res;
}
console.log(sum()); // 0
console.log(sum(1,2)); // 3
console.log(sum(1,2,3); // 6
👉 사실 ES6에서 Rest 파라미터 도입으로 인해 굳이 사용하지 않아도 되긴 함.
🔖 hasOwnProperty 메서드? 인수로 전달받은 프로퍼티 키가 객체 고유의 프로퍼티 키인 경우에만 true를 반환하고 상속받은 프로토타입의 프로퍼티 키인 경우 false를 반환한다.
ex)
const obj = { a : 1 };
console.log(obj.__proto__ === Object.prototype); // true
consoel.log(obj.hasOwnProperty('a')); // true
생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하는 프로퍼티. 일반 객체와 생성자 함수로 호출할 수 없는 non-constructor에는 prototype 프로퍼티 없음.
ex)
({}).hasOwnProperty('prototype'); // false