Ответы на вопросы на собеседование Основы 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 скролл страницы не работает
ОтветитьУдалитьЭтот комментарий был удален автором.
УдалитьАвтор полуграмотный, после 3 вопроса даже читать не стал все остальное. Не рекомендую.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьattachEvent работает только в старых версиях Internet Explorer. Плюс не указан способ добавления обработчика через атрибут HTML.
ОтветитьУдалить