evaluation map
The evaluation map is the basis-free recipe that turns a vector into an element of the double dual. Given v in V, define ev(v) to be the functional on V* whose value on any f is just f(v). In symbols, ev(v)(f) = f(v): the vector waits, and whatever functional comes along, it gets fed v.
Linearity holds on both sides, which is the whole point. ev is linear in v (so it is a genuine linear map V -> (V*)*), and ev(v) is linear in f (so it is a genuine functional on V*). It is also injective with no extra assumptions: if v is nonzero, some functional separates it from 0, so ev(v) is not the zero functional. In finite dimensions injective plus matching dimensions forces it to be an isomorphism.
What makes it 'canonical' is that nowhere did we choose a basis, an inner product, or any auxiliary data — we only used the definition of a functional. That is why every linear map respects it automatically and why it commutes with transposes, giving duality its clean, choice-free bookkeeping.
Use it to flip perspective on demand: a statement about vectors becomes a statement about functionals-on-functionals, and vice versa. The annihilator-double-annihilator theorem and the reflexivity of finite-dimensional spaces are both just the evaluation map being an isomorphism.
Evaluation embeds V into (V*)*; in finite dimensions it is the canonical isomorphism.
The injectivity step quietly uses that functionals separate points: for any nonzero v there is an f with f(v) != 0. In finite dimensions just take a basis containing v and the matching dual functional. This is the finite shadow of the Hahn-Banach theorem.