The KeyboardEvent.key value of KeyboardEvent is case-sensative, meaning that you don't need to check for KeyboardEvent.shiftKey in a KeyboardEvent handler. However, it seems that KeyboardEvent.key will always be lowercase when KeyboardEvent.metaKey === true