Неожиданное поведение hasOwnProperty

Я пишу функцию, которая проверяет, содержит ли объект такие ключи, как «id» или «serif: id». К сожалению, это не работает должным образом.

function returnIdPreferSerifId(object) {
    if (object.hasOwnProperty('serif:id' === true)) {
        return object['serif:id'];
    } else if (object.hasOwnProperty('id' === true)) {
        return object.id;
    } else {
        console.info(object)
        console.info(object.hasOwnProperty('serif:id' === true))
        console.info(object.hasOwnProperty('id' === true))
        throw `ID not found in Layer 1!`;
    }
}

Объект тестирования:

{ 
  id: 'ska',
  d: 'M255.848,145.321l19.839,0.054l12.677,8.62l6.085,-8.62l-8.62,-29.41l-30.488,13.637l0.507,15.719Z',
  style: 'fill:rgb(187,222,251);stroke:white;stroke-width:1.33px;' 
}

Я ожидаю, что функция вернет «ska», поскольку это идентификатор объекта. Вместо этого консоль показывает

false
false

path\to\module\modules\svgHandler.js:135
        throw `ID not found in Layer 1!`;
        ^
ID not found in Layer 1!

Заранее спасибо за помощь!

Вы неправильно написали выражения. Кроме того, явные сравнения с true или false обычно не нужны. Если функция возвращает логическое значение, просто используйте ее напрямую.

Pointy 03.05.2019 15:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У вас скобки не в том месте:

if (object.hasOwnProperty('serif:id' === true))

должно быть

if (object.hasOwnProperty('serif:id') === true)

и вы можете удалить === true, если хотите

if (object.hasOwnProperty('serif:id'))

object.hasOwnProperty('serif:id' === true) будет оценивать, как показано ниже.

object.hasOwnProperty(false)
false //if false is not key of object.

Вы должны выйти === false за пределы ()

if (object.hasOwnProperty('serif:id') === true)

Или вам не нужно что-то сравнивать с true в операторе if.

if (object.hasOwnProperty('serif:id'))

Другие вопросы по теме