It is *mostly* the same but there is one specific use-case where `in` is better. Also, `in` returns a boolean while the other returns an object.
The use-case:
```javascript
"ontouchstart" in window;
// false
window.ontouchstart
// undefined
window.ontouchstart = undefined
// undefined
"ontouchstart" in window;
// true
window.ontouchstart
// undefined
```
So, if someone were to set a touchstart event and then remove it via setting it with `undefined`, just referencing the property would give us the wrong result.