Skip to content

Instantly share code, notes, and snippets.

@makecs50
Created May 26, 2020 15:00
Show Gist options
  • Save makecs50/f592d7ca61863fd7826d21d4e07c0abe to your computer and use it in GitHub Desktop.
Save makecs50/f592d7ca61863fd7826d21d4e07c0abe to your computer and use it in GitHub Desktop.
/*
Извиняюсь за крайне поздний ответ...долго откладывал))
Пишу из своего опыта и как я вижу 'null':) 'null' - мы задаём свойствам объекта,
чтобы дать разработчику знать какие свойства будут у данного объекта. К примеру
в моем веб-приложении будет один объект ({}), который будет доступен во всем
приложении. В этом объекте будут храниться мои данные, после того как я авторизуюсь.
Если этот объект будет заполнен (email, phone, username и т.п.) тогда приложение, скажем,
будет давать доступ к закрытым страницам.
*/
// К примеру код для перехода на страницу для авторизованного пользователя будет выглядеть так:
let globalObject = {
email: null,
phone: null,
username: null,
};
function goToMainPage() {
if (globalObject.email) {
window.location.href = 'http://example.com/secret_url/';
} else {
window.location.href = 'http://example.com/';
}
}
axios.get('http://some_url_from_which_we_get_our_user_data').then((user) => {
globalObject = user;
goToMainPage();
});
// Можно, кончено, и так прописать (будет одинаково работать):
let globalObject = {};
function goToMainPage() {
if (globalObject.email) {
window.location.href = 'http://example.com/protected_url/';
} else {
window.location.href = 'http://example.com/';
}
}
fetch('http://some_url_from_which_we_get_our_authentication_data').then((user) => {
globalObject = user;
goToMainPage();
});
/*
Но суть в том, что разработчик посмотрев на ваш 'globalObject' (с null'ами в качестве значений свойств)
сможет сразу понять какие свойства ему доступны, вместо того чтобы в браузере открывать консоль разработчика (DevTOOLS)
и с помощью 'console.log(user)' выводить полученные данные, дабы узнать какие свойства доступны,
а уже затем прописывать свой код.
*/
// К примеру, я спокойно могу ввести дополнительную проверку получения телефона 'phone'
let globalObject = {
email: null,
phone: null,
username: null,
};
function goToMainPage() {
if (globalObject.email && globalObject.phone) { // тут добавил доп. проверку
window.location.href = 'http://example.com/protected_url/';
} else {
window.location.href = 'http://example.com/';
}
}
// ... остальной код
// Можно задаться вопросом: "а почему мы используем 'null', а не 'undefined' - в чем разница?"
let globalObject = {
email: undefined,
phone: undefined,
username: undefined,
};
/*
Это принятая практика среди разработчиков, так как 'null' - более короток в записи.
Отсюда мы имеем негласное правило: Значение 'undefined'
задается самим поведением языка, а 'null' задаем мы - разработчики. Однако нет ничего плохого в том,
чтобы мы сами задавали 'undefined', просто так не принято
(по крайней мере я в коммерческих проектах такого не встречал).
*/
/*
Итог: 'null' - для более легкой разработки проекта. Это все мое мнение)
*/
// P.S. плюс помогает переменным перестать ссылаться на что-либо (так сказать убрать значение)
globalObject = null;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment