0

以下代码来自 'JavaScript by Example Second Edition' 示例 15.24
我不明白代码 var evt = e || 窗口.事件;//浏览器差异
我觉得var evt应该是true还是false,所以evt.target应该是null吧?

function colorText(e){
  var evt = e || window.event; //Browser differences
  var evtTarget= evt.target || evt.srcElement;
  if(evtTarget.id=="first"){
div1.className="red";
}
else if(evtTarget.id == "second"){
div2.className="blue";
}
else{ div3.className="green";}
}
4

5 回答 5

4

到目前为止,所有答案在技术上都是正确的。完整的故事:

|| 如果将第一个操作数转换为布尔值的结果为真,则运算符返回第一个操作数的值。否则,它返回第二个操作数的值。 ES5 规范

Many different values are "falsy", including null and undefined. Nailing down exactly what falsy is can be tricky, but you can count on those, which is useful for catching variables and properties that may not be present in different browsers. If you want to check for an undefined variable yourself, though, it's usually best to use typeof instead.

于 2012-09-27T02:03:52.963 回答
2

如果e未设置,则意味着您没有使用参数调用该函数,那么evt将是window.event. 如果e设置了,那么evt将是什么e

有一个称为短路评估的概念,这意味着如果在没有完全评估的情况下满足条件,则不需要完全评估它。这里就是这种情况。如果e设置了,你不在乎是什么window.event,因为你已经有了可以设置evt的东西。

于 2012-09-27T01:59:57.597 回答
1

不,在 JavaScript 中 || 不会转换为布尔值,而是短路到任何值(从左到右)首先评估为真值。

它保留了表达式的评估。

于 2012-09-27T01:59:57.047 回答
1
var evt = e || window.event;

如果 e 不为空,此行将变量 evt 设置为 e。否则(如果 e 为空,例如如果 e 未传递给此函数),则将 evt 设置为 window.event。

于 2012-09-27T02:00:48.283 回答
1

如果关键字表达式不是null falsey,则返回第一个表达式操作数的值,否则返回第二个表达式的值。

Javascript 是弱类型的,所以你总是可以使用 || 作为布尔值,因为所有不为假或不为空的东西都会计算为真。但它实际上是在这里返回值 s。所以evt变成e(参数)或者如果e 不存在有一个错误的值,它变成window.event.

于 2012-09-27T02:00:53.483 回答