Cornstarch's job in most recipes is narrow and specific: mixed with a little cold water into a slurry, then stirred into a hot liquid, it thickens a sauce quickly without adding flavor. Most substitutes can do the thickening part — the differences show up in texture, clarity, and how well they hold up to heat.
Flour
The most common substitute already in most kitchens. Flour needs roughly twice as much by volume as cornstarch to achieve the same thickening power, and it produces a slightly cloudier, more opaque sauce rather than cornstarch's glossy clear finish. It also needs to actually cook for a minute or two after adding, or it can leave a raw, starchy taste.
Arrowroot
A close substitute in a roughly 1:1 ratio, and one of the better matches for cornstarch's clear, glossy finish — arrowroot thickens at a lower temperature and holds up better in dishes that will be reheated later, since cornstarch-thickened sauces can thin back out after a second heating.
Potato starch
Also a fairly close 1:1 substitute with a similarly clear finish. It thickens quickly at a lower temperature than cornstarch, which means it's easy to overcook past the point where it starts thinning back out — added toward the very end of cooking, off higher heat, works best.
Tapioca starch
Works well as a thickener but produces a noticeably glossier, slightly stretchier texture than cornstarch — a good match in some sauces, less so where a cleaner, non-stretchy consistency matters.
The technique matters as much as the substitute
Regardless of which starch is used, the same core technique applies: mix it with a small amount of cold liquid first to form a smooth slurry before adding it to a hot pan. Adding any of these starches directly as a dry powder to a hot liquid causes clumping, since the outside of each clump cooks and seals before the inside can dissolve.