这三元表达式在做什么?

时间:2015-12-01 17:30:25

标签: javascript ternary-operator

我有一个我测试的函数,它接受两个参数Definition和Element,并且在其中有一个三元语句,如

otherThingName: (_.has(Definition.thing, 'thingName') ? Element[Definition.thing.thingName] : null)

现在Definition.thing.thingName将存在,但Element没有名为Definition的属性。

在相同的设置otherThingName

下,是否在Element上设置了该属性

2 个答案:

答案 0 :(得分:1)

三元表达式是一个简短的if / else,所以在第一个例子中,它测试语句(_.has(Definition.thing, 'thingName')

我不使用下划线,但看起来此测试检查Definition.thing是否具有thingName属性。

如果返回true,则会将otherThingName设置为Element[Definition.thing.thingName]

否则会将其设置为null

Element[Definition.thing.thingName]正在查看名为Element的对象,并使用与Definition.thing.thingName的值匹配的键撤回该属性。

例如,如果

Definition.thing.thingName == "name"

Element[Definition.thing.thingName] == Element["name"] == Element.name

希望这有帮助。

答案 1 :(得分:1)

扩展文本会变得更清晰:

var str;

if (_.has(Definition.thing, 'thingName')) {
    str = Element[Definition.thing.thingName]
} else {
    str = null;
}

...
    otherThingName: str

看起来它将某个对象'otherThingName'的成员定义为Element为字段Definition.thing.thingName设置的任何内容(如果存在),否则为null。