I'm not sure that the Automation object is in good shape in the current build of Sierra – perhaps an interregnum in responsibility for macOS automation ?
but the value returned by the .currentApplication(); method depends, in any case, on the name space in which it executes – its value can vary, for example, between a global and a module level context, and it's up to the particular application object to implement a .name() method (or .name property).
(function () {
'use strict';
var a = Application.currentApplication(),
sa = (a.includeStandardAdditions = true, a);
return sa.properties();
})();
{"selection":Application.currentApplication(), "frontmost":true, "class":"application",
"name":"Script Editor", "version":"2.9"}
(Hard to think, incidentally, of a good reason for binding names in any global JS context - in the case of Automation object scripting, the global name space persists between script runs, so its quite easy to trip up on things left on the floor by previous global context runs. (A module context, in contrast, cleans up after itself))
Try, for example, running this piece of Sierra ES6 JavaScript twice in Script Editor (unwrapped in a module – anonymous function envelope):
const a = Application.currentApplication(),
sa = (a.includeStandardAdditions = true, a);
sa.properties();
Runs fine the first time, but not the second ...
(The bare global context is really a bit too complex and over-crowded to be a helpful workplace)