Ответы на вопросы на собеседование Основы JavaScript (часть 1).
- Как переадресовать страницу в JavaScript?
- Сколько параметров можно передать функции?
Сколько угодно.
- Чем отличается наследование в JavaScript от наследования в PHP?
В отличие от PHP, где наследование можно делать одним способом, в JavaScript таких способов много. На уровне языка реализовано наследование на прототипах.
В JavaScript каждый объект может иметь ассоциацию с другим объектом - так называемый "прототип" (prototype). В случае, если поиск некоторого свойства (или метода) в исходном объекте заканчивается неудачно, интерпретатор пытается найти одноименное свойство (метод) в его прототипе, затем - в прототипе прототипа и т. д. К примеру, если мы затребовали обращение к obj.prop (или, что абсолютно то же самое, obj['prop']), JavaScript начнет искать свойство prop в самом объекте obj, затем – в прототипе obj, прототипе прототипа obj, и так до конца.
- Приведи пример наследования в JavaScript.
Например, пусть объект "cat" наследуется от объекта "animal". В наследовании на прототипах это реализуется как ссылка
- Пара слов об объектах в JavaScript?
Объекты (они же - ассоциативные массивы, хэши) и работа с ними в JavaScript реализованы не так, как в большинстве языков. Объект в JavaScript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.
- Что представляет из себя метод объекта в JavaScript?
- Что представляет из себя метод объекта в JavaScript?
Метод объекта в JavaScript - это просто функция, которая добавлена в ассоциативный массив.
- Зачем в JavaScript перед переменной писать var?
- Зачем в JavaScript перед переменной писать var?
Если создавать переменную через обычное присваивание - будет создана "глобальная переменная". Пример:
Если создавать переменную с использованием слова var, тогда будет создана "локальная переменная", которая перестаёт существовать после завершения работы функции. Пример:
- Есть две функции: function f(a,b) { return a+b } и var f = function(a,b) { return a+b }. Есть ли между ними разница? Если есть то какая?
Есть, разница в видимости функции. Вариант функции без var виден везде в текущей области видимости. В том числе и до самого определения функции. Вариант с var присваивает функцию переменной, поэтому такая функция видна только после определения.
- Как создать массив в JavaScript?
- Можно ли в JavaScript использовать функцию в качестве конструктора?
- Сколько и какие конструкции для циклов есть в JavaScript?
Три: for, while и do...while.
- Что cделает код: break mark; ?
Выйдет из текущего блока цикла или switch на метку "mark".
- Можно ли задать массив таким образом: var a = "a,b".split(',')?
- Можно ли задать массив таким образом: var a = "a,b".split(',')?
Да, можно.
- Что выведет alert(typeof null); ?
Выведет сообщение "object".
- А это: alert(null instanceof Object); ?
Выведет сообщение "false".
- 0.1 + 0.2 == 0.3 ?
Нет, т.к. вычисленное значение будет равно 0.30000000000000004. Это действие точности вычислений и проявляется она не только в JavaScript.
- Что выведет alert(typeof NaN); ?
- Что выведет alert(typeof NaN); ?
"Number"
- Что выведет alert(NaN === NaN); ?
"false"
- В чём различие свойств innerHTML и outerHTML?
Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново.
outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента.
Также, важно отметить, что innerHTML поддерживается всеми современными браузерами, а outerHTML поддерживается в IE (с некоторыми отличиями от остальных браузеров), в последних версиях Opera, и в браузерах на основе последних WebKit (Safari, Chrome), но не поддерживается в Firefox.
outerHTML возвратит:
- Какая разница между операторами == и ===?
- Какая разница между операторами == и ===?
Оператор == сравнивает на равенство, а вот === сравнивает на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу. Именно из-за этого он обычно и используется.
- В чем разница между Object.getOwnPropertyNames() и Object.keys()?
Object.getOwnPropertyNames() возвращает перечислимые и не перечислимые свойства из объекта или массива.
Object.keys() возвращает перечислимые свойства из объекта или массива.
- С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки?
Это возможно с помощью конструкции try{}... catch{}
- Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку?
Функция а() инициализируется на этапе загрузки скрипта, как бы "всплывает вверх" а функция б инициализируется, когда объявляется переменная b
- Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?
Глобальная переменная - переменная, которая доступна (видима) во всем документе, в отличии от локальной (ограничена рамками блока программного кода, внутри которого она определена)
Большинство JavaScript разработчиков избегает использования глобальных переменных. Одна из причин - возможный конфликт имен глобальных и локальных переменных. Так же код использующий глобальные переменные может быть тяжелее сопровождать и тестировать.
- Что такое замыкания (closure) в JavaScript?
Простыми словами это внутренняя функция, т.е. функция в функции.
Замыканием (closure) называют потому, что после выполнения родительской или внешней функции, код внутренней все еще "живет" в интерпретаторе, и его можно выполнить. Ошибок не возникнет даже если внутренняя функция (замыкание) будет использовать переменные из внешней функции. Например, эту особенность можно использовать для создания функций обработчиков событий:
- Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки).
- Что вернет выражение +new Date()? Чем отличается от Date.now().
Ответ в том, что +new Date(); создаст экземпляр объекта Date и благодаря + переведет его в числовой формат. Во втором случае вызовется статический метод конструктора, который является более приоритетным, т.к. во-первых он не требует создания экземпляра, а во-вторых является более понятным.
- Какое значение возвращает данное предложение ~~3.14?
Ответ: 3
- Какое значение возвращает данное предложение?
"i'm a lasagna hog".split("").reverse().join("");
Ответ: "goh angasal a m’i"
- Что покажут эти два alert?
Ответ: "Hello World" и ReferenceError: bar is not defined
- Чему равно foo.length?
Ответ: 2
- Что такое prototype в javascript?
В общих чертах prototype - это свойство позволяющее добавлять уже существующим объектам свойства, также используется для эмуляции наследования классов в JavaScript. Подробный ответ написан здесь . Еще как вариант, можно упомянуть о Prototype.js. Это популярная библиотека добавляющая удобные ООП возможности в программы на JavaScript-е.
- Какие способы навешивания обработчиков событий вы знаете ?
События можно добавлять тремя способами:
- htmlElement.onclick = function(event) { .... } - так можно добавить только один обработчик
- htmlElement.addEventListener( "click", ... ) - так можно навесить несколько обработчиков, сохраняет порядок обработчиков
- htmlElement.attachEvent( "on"+имя_события, обработчик) - тоже можно навесить несколько, не сохраняет порядок обработчиков, нет доступа к элементу на котором сработало событие.
Это полный капец
ОтветитьУдалитьпишите без ошибок код , setTimeout(alert("Hello",3000);
ОтветитьУдалитьОшибка у Вас. Во-первых, не закрыли скобку, будет синтаксическая ошибка при выполнении. Во-вторых, ошибка в логике. setTimeout - принимает 1м параметром либо функцию либо строку с кодом функции, в Вашем случае передаете в setTimeout - undefined(результат выполнения alert, который к тому же выполнится сразу же, а не через таймаут).
УдалитьВ примере точно ошибка, нельзя так вызывать функцию. Вообще есть более изящный вариант для этого – setTimeout(alert, 3000, 'Hello');
УдалитьСпасибо за такой мануал!
ОтветитьУдалитьна последней версии хрома на mac os скролл страницы не работает
ОтветитьУдалитьЭтот комментарий был удален автором.
УдалитьСпасибо, интересные вопросы! Для джуниора понятны, зная js на уровне es3 можно смело идти на собеседование. Хотя тут можно еще добавить про рекурсию и стек, разницу между __proto__ и prototype свойствами, более подробно работу с объектами (заморозка, свойства только для чтения...). Или это уже для мидла вопросы? Было бы интересно какой примерно уровень необходим для мидла!?
ОтветитьУдалитьАвтор полуграмотный, после 3 вопроса даже читать не стал все остальное. Не рекомендую.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьattachEvent работает только в старых версиях Internet Explorer. Плюс не указан способ добавления обработчика через атрибут HTML.
ОтветитьУдалить