Надеюсь, это будет легко для вас, опытных разработчиков. Я пытаюсь использовать службу скриптов Google Apps, чтобы получить имя пользователя, вошедшего в систему для моего сайта Google. Я могу заставить электронное письмо отображаться нормально, однако, когда я пытаюсь использовать метод подстроки для сокращения имени пользователя, я получаю следующую ошибку.
TypeError: Cannot find function substring in object [email protected]. (line 4, file "getusername")
Я понимаю, почему получаю эту ошибку, но не знаю, как ее исправить. Ниже мой код
function doGet() {
var userEmail = Session.getEffectiveUser();
var username = userEmail.substring(0, userEmail.indexOf("@"));
var HTMLString= "<body> <h2> Logged in as " + userEmail +",</h2></body>";
HTMLOutput = HtmlService.createHtmlOutput(HTMLString);
return HTMLOutput
}
Я предполагаю, что, поскольку переменная userEmail является динамической в зависимости от вошедшего в систему пользователя, переменная username не может видеть адрес электронной почты, пока он не будет выполнен?
Любая помощь будет принята с благодарностью.
Полный новичок в Javascript здесь.
Спасибо
разъем



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Изменять:
var userEmail = Session.getEffectiveUser();
к:
var userEmail = Session.getEffectiveUser().getEmail();
Если вы посмотрите документацию для Session.getEffectiveUser(), вы увидите, что такое «возврат». Я долгое время не обращал на это особого внимания. Но вам всегда нужно знать, что возвращается. Некоторые возвращаемые типы: строка, объект, целое число или класс. В зависимости от того, что будет возвращено, это определит, что вы можете делать дальше. Многие новички замечают, что между вещами есть период, и могут понять, что им нужно исправить все вместе с точкой. Но они действительно не знают, для чего этот период. Этот период называется точечным оператором, и каждое место, где есть «точечный оператор», по сути, является еще одним шагом в процессе. Вы «связываете» несколько операций вместе. В коде: Session.getEffectiveUser().getEmail() есть две точки (операторы с точкой) и две разные вещи, каждая из которых имеет свое возвращаемое значение. Метод getEmail() возвращает строку. В документации указано, что getEffectiveUser() возвращает «пользователя», но если вы перейдете к документации для «пользователя», вы увидите, что он описан как «класс». Чтобы понять, что такое «Класс», вам нужно провести небольшое исследование.
Да ! Большое спасибо. Это именно то, что мне было нужно: D Есть шанс, что вы могли бы объяснить, почему это сработало? Еще раз спасибо.
@JackSmith Почему то, что сработало? Используете метод объекта для доступа к свойству объекта? Это то, что делают методы. User#getEmail() возвращает значение свойства email для данного объекта User.
См. Добавленное объяснение.
Большое спасибо за ваше объяснение @SandyGood Очень признателен: D
Вы можете отметить ответ как правильный, щелкнув большую зеленую галочку.
Вы пытаетесь сократить объект, а не строку. См. Ответ @ SandyGood, чтобы узнать, как это сделать.