You'd rather use a language full of undefined behavior as opposed to one in which (practically) every behavior of a program is specified by ECMA-262? To "avoid surprises at runtime"?
Surprises based on undefined behavior are usually not surprises at runtime, because of superior tooling. Either way, C is best because it has both of those things (tooling, defined behavior). It is possible to write very nice C.