Неожиданное поведение hasOwnProperty - PullRequest
2 голосов
/ 03 мая 2019

Я пишу функцию, которая проверяет, содержит ли объект ключи типа '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.log(object)
        console.log(object.hasOwnProperty('serif:id' === true))
        console.log(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!

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

Ответы [ 2 ]

4 голосов
/ 03 мая 2019

Вы поставили скобки не в том месте:

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

должно быть

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

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

if (object.hasOwnProperty('serif:id'))
1 голос
/ 03 мая 2019

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'))
...