2) !! is not an operator, it's two operators. :D
7) If you can do it with just getElementByID, JUST FLIPPING DO IT WITH GETELEMENTBYID! querySelector is SLOWER and should not be used in cases where getElement(s)By(xxx) can! This applies to classes too. You're making it walk the entire joe-blasted DOM for matches, instead of leveraging the lookup tables most browsers provide when the DOM is created.
I'm seeing this bit of derptitude more and more and it's like "really?"
11) a double "binary not" does a truncate (floor), not a round. Those are NOT functionally identical. Feed it 99.5, you'll get 99, not 100.
12) Splice doesn't delete jack, because it creates an entirely new array with an entirely new memory address and allocation. As such it can increase the memory footprint of your code and be SLOWER, though that depends on how many elements you delete. If you're plucking out one or two from an "array" of hundreds, delete is faster. If you're getting rid of 90% of hundreds of records, then splice likely wins.
14) Not sure what you even mean by "named parameters", but given that I find arrow functions to be painfully cryptic and utterly pointless in the majority of usage cases... That type of vague gibberish code is the opposite of what I'd call "more readable"
Honestly a LOT of this cryptic symbology that's getting hot and trendy is why I still hate C syntax to this day, and all because "wah wah eye dunz wunna type teh wurd normies will undorstanz!". I swear most JS developers won't be happy until the language looks more like brainf***.
But then I spent a decade working in Ada, so I have a bit different a definition of code clarity than most.