Created
May 26, 2020 15:00
-
-
Save makecs50/f592d7ca61863fd7826d21d4e07c0abe to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Извиняюсь за крайне поздний ответ...долго откладывал)) | |
Пишу из своего опыта и как я вижу '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