2

我正在编写一个函数来检查对象是否包含像“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”,因为它是对象 ID。相反,控制台显示

false
false

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

提前感谢您的帮助!

4

2 回答 2

4

你的括号放错地方了:

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

应该

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

如果你愿意,你可以放弃 === true

if (object.hasOwnProperty('serif:id'))
于 2019-05-03T13:58:11.543 回答
1

object.hasOwnProperty('serif:id' === true)将评估如下。

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

你应该搬到=== false外面()

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

或者您不需要将某些内容与trueif 语句进行比较。

if (object.hasOwnProperty('serif:id'))
于 2019-05-03T13:59:11.107 回答