Точный синтаксис, который вы хотите, невозможен в JavaScript. Способ выполнения JavaScript должен был бы измениться довольно фундаментальным образом. Например:
var name = getUserById(id).andand().name;
// ^
// |-------------------------------
// if getUserById returns null, execution MUST stop here |
// otherwise, you'll get a "null is not an object" exception
Однако JavaScript не работает таким образом. Это просто не так.
Следующая строка выполняет почти то, что вы хотите.
var name = (var user = getUserById(id)) ? user.name : null;
Но удобочитаемость не подходит для более крупных примеров. Например:
// this is what you want to see
var initial = getUserById(id).andand().name.andand()[0];
// this is the best that JavaScript can do
var initial = (var name = (var user = getUserById(id)) ? user.name : null) ? name[0] : null;
И есть побочный эффект этих ненужных переменных. Я использую эти переменные, чтобы избежать двойного поиска. Переменные портят контекст, и если это очень важно, вы можете использовать анонимные функции:
var name = (function() {return (var user = getUserById(id)) ? user.name : null;})();
Теперь пользовательская переменная очищена правильно, и все счастливы. Но вау! как много печатать! :)