var qsa = function(sel){return document.querySelectorAll(sel)};
However, it does not work with: var subqsa = function(el,sel){return el.querySelectorAll(sel);} var queryAll = document.querySelectorAll.bind(document);What am I missing here
An empty NodeList[1] to be precise, which is sort of kind of like an array in that it has a length property and you can access its elements with index notation (`nodeList[0]`), but it doesn't inherit from Array.prototype, so it doesn't support methods like `forEach` or `map`.
[1] https://developer.mozilla.org/en-US/docs/Web/API/NodeList
Speaking of which, there are few features in ES2015 that make NodeList more palatable:
1. Iterables. NodeList is iterable and you can use, among others, the for..of construction to iterate over its content.
2. There is the Array.from method for turning array-like objects into true arrays. Not much different from our usual method of calling [].slice.call in this particular case, yet it's a bit shorter, standardized, and has a few additional perks, like accepting map function as the second argument.
https://medium.com/@devlucky/nodelist-object-is-finally-an-i...
https://nicosantangelo.github.io/weaintfoundshit.js/interact...
In jQuery, a selector which doesn't match will evaluate to true, where as .length would be 0. This is a source of bugs, I'm sure, especially for beginners.