JS

[JavaScript] hasOwnProperty ๊ฐ์ฒด ์†์„ฑ ํ™•์ธํ•˜๊ธฐ

hyonie 2025. 4. 3. 17:17

 

๐Ÿ“‚ ๋ชฉ์ฐจ

     


    hasOwnProperty๋ž€?

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด(Object)๋Š” ์ƒ์œ„ ๊ฐ์ฒด์ธ object๋กœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ(๊ธฐ๋Šฅ)๋ฅผ ๋ฌผ๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ hasOwnProperty()์ž…๋‹ˆ๋‹ค. 

    const user = {
      name: "Hyonie",
    };
    
    console.log(user.hasOwnProperty("name"));  // true
    console.log(user.hasOwnProperty("toString"));  // false

    ๐Ÿ‘‰ ์ด ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ์†์„ฑ์ด ์ง์ ‘ ์ •์˜๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ด์ค๋‹ˆ๋‹ค.(์ƒ์†๋œ ์†์„ฑ์€ false๋กœ ํŒ๋‹จ)

     

    โ— ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

    const params = {
      hasOwnProperty: () => false,
      id: 123,
    };
    
    console.log(params.hasOwnProperty("id")); // TypeError ๋ฐœ์ƒ ๊ฐ€๋Šฅ or false

    ๐Ÿ˜ฑ hasOwnProperty ์ž์ฒด๋ฅผ ์†์„ฑ์œผ๋กœ ๋ฎ์–ด์“ธ ๊ฒฝ์šฐ, ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ๐Ÿ” ๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•!

    ์ด ๋ฌธ๋ฒ•์€ ํ•ญ์ƒ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

    Object.prototype.hasOwnProperty.call(obj, key);

    ์™œ๋ƒํ•˜๋ฉด:

    • ์›๋ž˜์˜ Object์—์„œ ์ง์ ‘ ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋ ค์™€์„œ
    • ๋‚ด๊ฐ€ ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ์ฒด(obj)์— ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

     

    ๐Ÿ” ๋ฌธ๋ฒ• ๊ตฌ์กฐ ์„ค๋ช…

    ๊ตฌ์„ฑ ์„ค๋ช…
    Object.prototype.hasOwnProperty ์ง„์งœ ์˜ค๋ฆฌ์ง€๋„ ๋ฉ”์„œ๋“œ
    .call() ํŠน์ • ๊ฐ์ฒด์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ด
    obj ๊ฒ€์‚ฌํ•  ๋Œ€์ƒ ๊ฐ์ฒด
    key ๊ฒ€์‚ฌํ•  ์†์„ฑ ์ด๋ฆ„(๋ฌธ์ž์—ด)

     

    ์˜ˆ์ œ ์ฝ”๋“œ

    const obj = Object.create({ inheritedKey: "hello" });
    
    obj.realKey = "hi";
    
    for (const key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        console.log(`์ง„์งœ์†์„ฑ: ${key}`); // ์ง„์งœ์†์„ฑ: realKey
      }
    }

     

    โœ… ์ƒ์†๋œ inheritedKey๋Š” ๊ฑธ๋Ÿฌ์ง‘๋‹ˆ๋‹ค.

     

     

    โœจ ์ •๋ฆฌ

    • hasOwnProperty๋Š” ๊ฐ์ฒด๊ฐ€ ์ž๊ธฐ ์ž์‹ ์ด ๊ฐ€์ง„ ์†์„ฑ๋งŒ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ
    • Object.prototype.hasOwnProperty.call(obj, key)๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์†์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•