The best I could find was here
Based on Michael's answer I dug a bit in to knockout-3.3.0-debug.js and can see where this extender is used (observable arrays by default) and what that extender does. However I then figured that bindings like foreach might take advantage of this, and it appears they don't.
So...
1. Should these event types be documented somewhere on
knockoutjs.com? This page:
http://knockoutjs.com/documentation/observables.html#explicitly-subscribing-to-observables talks about the change and beforeChange events, but that's about it. I suspect there may be more as they come up from time to time in various GitHub issue discussions but I can't find much on the net about them. I've got by with Knockout and not knowing this for many months so I suspect they're used in niche cases, but it's unsettling not quite understanding something a library I'm using :)
2. What benefit comes from arrayChange event being raised? I assumed the foreach binding would use it, but arrayChange doesn't appear anywhere else in the knockout debug javascript file apart from within that extender. Am I missing something?
Thanks... :)
Ryan's blog post about ko.utils talks about the ko.utils.compareArrays function, which has a similar purpose but is not O(1) like the arrayChange (sometimes) is.
Still are there other events, and if so, is there somewhere we can go to get a summary of them?