Difference between them seems to be very confusing to me. What is difference between them and exactly when they are called
First of all Kudos to the above answers. I am adding a use-case for both of the functions which I have faced personally.
ngOnChanges() (OnChanges): to detect changes for variables passed by value
ngDoCheck() (DoCheck) : to detect changes for variable passed by reference such as arrays, which are not detected by ngOnChanges() as the old value and the new value have the same reference