keyCode returns the "virtual-key code" from the WM_KEY* messages in the Windows API when checked in the keydown and keyup events, and the ASCII/Unicode character codes in the keypress event.
For example, the DELETE key has a hex value of 007F (127 decimal) in both Unicode and ASCII. If I inspect window.event.keyCode in the keyup event, after pressing the DELETE key, the property returns a value of 46 (decimal). The DELETE key does not generate keypress events. 46 happens to be the VKey code for a delete key on my US keyboard. (VKey codes are defined in WinUser.h.)
Likewise, the keyCode also returns 65 in the keydown and keyup events regardless of whether the character entered is an "A" or an "a". However, the keyCode actually does return a 97 for "a" and 65 for "A" in the keypress event. So beware the internal inconsistency of keyCode, depending on during which event it is inspected.