在onclick函数中使用双管道-为什么事件为假

Using double pipes in onclick function - why would event be false?

本文关键字:为什么 事件 管道 函数 onclick      更新时间:2023-09-26

我试图理解委托是如何工作的,我在这里找到了一个很好的解释

在站点上,它们包括下面的代码。我在理解双管的使用上有很多困难。我对StackOverflow做了一些研究,了解到双管道用于检查第一个值是否为假(即它是or)。然而,在本例中,onclick被触发是因为显然是发生的事件。

那么为什么event会为假呢?用双管有什么用?

table.onclick = function(event) {
  event = event || window.event
  var target = event.target || event.srcElement
  while(target != table) { // ( ** )
    if (target.nodeName == 'TD') { // ( * )
       toggleHighlight(target)
    }
    target = target.parentNode
  }
}

注:说到这里,他们省略分号有什么原因吗?他们有时是不必要的,还是对他们来说更容易?

事件对象并不总是传递给点击处理程序- IE有窗口。事件而不是http://javascript.info/tutorial/obtaining-event-object

有了这样的东西,正常的赋值声明通常有一个or语句(||)来跨多个浏览器工作,并允许浏览器分配哪个为真。下面是一些例子:

var webgl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");

在这个语句中,我试图访问画布元素的WebGL上下文。现在有些浏览器比其他浏览器更老,为了支持尽可能多的浏览器,我请求标准的WebGL上下文,或者一个叫做"experimental-webgl"的上下文,这可能是在旧版本的Chrome, Firefox等。

另一个例子:

requestAnimFrame = return
    window.requestAnimationFrame       ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame;

我试图在这里设置requestAnimationFrame,这是一种非常快速有效的方法,比setInterval();更好。再一次,我试图确保我支持尽可能多的浏览器。

最后一个来自jQuery源代码:

jQuery规范了跨浏览器的非标准化属性。event.which规范密钥码检测

event.which = original.charCode != null ? original.charCode : original.keyCode;

在这里,检查是看charCode是否返回一些东西,如果没有,那么浏览器不使用该属性,所以JavaScript将尝试访问并分配keyCode属性给event.which

希望这能让你了解||在赋值声明中的作用