Я пишу функцию, которая проверяет, содержит ли объект такие ключи, как «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!
Заранее спасибо за помощь!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас скобки не в том месте:
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'))
Вы неправильно написали выражения. Кроме того, явные сравнения с
trueилиfalseобычно не нужны. Если функция возвращает логическое значение, просто используйте ее напрямую.