为什么不能进行OR操作" ||"替换三元运算符"? :"在这个JavaScript代码中?

时间:2016-12-28 02:57:40

标签: javascript

以下代码适用于浏览器:

return Point(x: theX, y: theY)

当我将其更改为

var event = event || window.event; 
var eTarget = event.target || event.srcElement; 
var eTargetId = eTarget.id;

也有效。

当我将代码更改为

var eTargetId = event.target ? event.target.id : event.srcElement.id;

它在IE 678中不起作用。我收到以下错误:

  

SCRIPT5007:预期的对象。

为什么会这样?

3 个答案:

答案 0 :(得分:14)

如果您没有检查基值是否真的是对象,请不要尝试读取属性,而不是null。

通常会做

var eTargetId = event.target && event.target.id || event.srcElement.id;

或者,如果事件目标可能没有ID,

var eTargetId = event.target && event.target.id
                || event.srcElement && event.srcElement.id
                || "";

答案 1 :(得分:13)

这可能发生,因为event.target为空,但event不是。如果event.target为空,则前两次尝试使用短路来防止进一步评估。

答案 2 :(得分:3)

首先评估eventevent.targetevent.srElement

var eTargetId = ((event = event || window.event) 
                && (eTargetId = event.target || event.srcElement)
                && eTargetId["id"]) || void 0;