depending on which browser you are using there are slight changes to the api's accessable to web sites depending if you are in private mode or not. For example, in firefox private mode service workers are not avalable so a simple check to see if navigator.serviceWorker is undefined is all you need. Other browsers have other tells such as what types of storage are avilable, the size of storage (if avalable).
Firefox gradually adds protections against fingerprinting methods that aren't just cookies. Of course, sometimes this means stepping on borderline cases of legitimate API usage. Also these protections are added for the private mode first.