- JS
- JavaScript
Ответы
К ошибке приведут операции инкремента/декремента (увеличение или уменьшение на единицу), если попытаться вызвать их не на переменной, а на числе:
let counter = 1;
console.log(++counter); // => 2
console.log(++1); // => SyntaxError: Invalid left-hand side expression in prefix operation
Курсы по программированию на Хекслете
Backend-разработка
Разработка серверной части сайтов и веб-приложений
Frontend-разработка
Разработка внешнего интерфейса сайтов и веб-приложений и верстка
Создание сайтов
Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails
Тестирование
Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP
Аналитика данных
Сбор, анализ и интерпретация данных на Python
Интенсивные курсы
Интенсивное обучение для продолжающих
DevOps
Автоматизация настройки локального окружения и серверов, развертывания и деплоя
Веб-разработка
Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков
Математика для программистов
Обучение разделам математики, которые будут полезны при изучении программирования
JavaScript
Разработка сайтов и веб-приложений и автоматизированное тестирование на JS
Python
Веб-разработка, автоматическое тестирование и аналитика данных на Python
Java
Веб-разработка и автоматическое тестирование на Java
PHP
Веб-разработка и автоматическое тестирование на PHP
Ruby
Разработка сайтов и веб-приложений на Ruby on Rails
Go
Курсы по веб-разработке на языке Go
HTML
Современная верстка с помощью HTML и CSS
SQL
Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД
Git
Система управления версиями Git, регулярные выражения и основы командой строки
Похожие вопросы
Js какая арифметическая операция приведёт к ошибке
JavaScript — это язык программирования, который обрабатывает множество операций, включая арифметические операции. Однако есть определенные условия, при которых выполнение арифметической операции может привести к ошибке.
Деление на ноль
В JavaScript деление на ноль не вызывает ошибку, как это может быть в некоторых других языках программирования. Вместо этого результатом будет бесконечность (Infinity), если делитель положительный, или минус бесконечность (-Infinity), если делитель отрицательный.
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
Операция с NaN
Несмотря на то, что операция с NaN (Not a Number) не вызывает ошибку, она возвращает NaN. Это может привести к непредсказуемым результатам в вашем коде.
console.log(1 * NaN); // NaN
Переполнение
JavaScript может обрабатывать очень большие числа, но есть предел. Если результат арифметической операции превышает максимальное безопасное целое число в JavaScript (9007199254740991), это может привести к непредсказуемым результатам, хотя и не вызывает ошибку напрямую.
console.log(9007199254740991 + 1); // 9007199254740992 - всё ещё точно
console.log(9007199254740991 + 2); // 9007199254740992 - уже неточно!
JavaScript — один из самых популярных языков программирования. Несколько лет назад про него говорили, что он ночной кошмар программиста, который работает с ним. В некоторых случаях это утверждение было правдой. Однако большей частью эти высказывания относились к DOM API. Тем не менее существует несколько явных ошибок языка.
Данная статья имеет целью предупредить читателя о некоторых недостатках JavaScript.
1. Название. JavaScript — это не Java.
Начнем с шутливого пинка по названию. Изначально оно звучало как Mocha, затем LiveScript, и, наконец, изменилось на JavaScript. В соответствии с историческими фактами, схожесть с названием Java стала результатом соглашения между Netscape и Sun, в обмен на согласие Netscape встроить поддержку Java в их тогда популярный браузер. Стоит также отметить, что название пришло почти как шутка благодаря соперничеству между LiveScript и Java в сфере скриптов на стороне клиента.
Тем не менее, в форумах присутствуют тысячи сообщений на тему “JavaScript не имеет ничего общего с Java”!
2. Null — это объект?
Попробуйте ввести в консоль JavaScript:
console.log(typeof null); // Возвращает: object
Утверждение не имеет смысла. Если null означает отсутствие значения, то как оно может иметь тип object? Простой ответ на поставленный вопрос: это обычная ошибка, которую сделали во время разработки первого релиза JavaScript. Она была перенесена из JScript.
3. NaN !== NaN
Мы можем предположить, что NaN ссылается на значение, которое не является разрешенным числом. Проблема заключается в том, что NaN ничему не равно, в том числе и самому себе.
console.log(NaN === NaN); // Врозвращает false
Если Вы хотите проверить, имеет ли переменная значение Nan, то нужно использовать функцию isNaN().
4. Глобальные переменные.
Зависимость от глобальных переменных хорошо известна как одна из худших особенностей JavaScript. Для простых проектов, таких как всплывающие подсказки, их действие не заметно. Однако, основная нагрузка на глобальные переменные ложиться тогда, когда Вы начинаете ссылаться на многочисленные скрипты, без знанния внутренней структуры. И вот здесь программа начинает выдавать ошибки одну за другой по причине совпадения имен.
5. Строка userAgent содержит Mozilla. Интересно почему?
Данный факт не являектся ошибкой JavaScript. Все происходит из-за производителей браузеров. Использование строки userAgent является распространенной практикой в JavaScript, так как очень важно знать, с чем приходится иметь дело. Например, если в браузере Safari ввести в консоли JavaScript команду:
console.log(navigator.userAgent);
// Вывод на экран: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10
Заметьте: в начале строки стоит: Mozilla/5.0. Почему же браузер Safari идентифицируется как основанный на Mozilla? Хотя в дальнейшем происходит коррекция идентификации, нет объяснений, почему продолжается введение в заблуждение программистов. В действительности, Вы можете обнаружить, что большинство браузеров идентифицируют себя как Mozilla. Ответ на вопрос, почему так происходит, можно дать взлянув на десять лет назад. И основной причиной является не ошибка, а ряд непреодолимых обстоятельств.
Для тех, кто не знает, строка userAgent просто идентифицирует браузер и его версию. Например, первый браузер Mosaic имеет такую строку userAgent:
Mosaic/0.9 // имя браузера / номер версии
Смысл прослеживается очень четко. И когда Netscape вышло на рынок, они использовали формат Mosaic и добавили секцию кодировки.
Mozilla/2.02 [en] (Win95; I) // имя браузера / версия / кодировка
Продолжение отличное. Проблемы начались, когда на рынке появился новый игрок — догадайтесь какой — Internet Explorer 3. Когда он стартовал, Netscape был самым популярным доступным браузером. В действительности, много серверов и программ использовали строку userAgent для идентификации Netscape. Хотя сейчас это вызывает горячие споры, но тогда, если бы IE использовало свою собственную строку userAgent, например такую:
MSIE/3.0 (Win95; U)
Такой ход поставил бы IE 3 в очень ущербное положение, потому что Netscape уже идентифицировался большинством серверов. Поэтому разработчики решили идентифицировать продукт Microsoft как браузер Mozilla, а потом добавить метки для Internet Explorer.
Mozilla/2.0 (compatible; MSIE 3.0; Windows 95)
В наши дни детекция с помощью строки userAgent стоит последней в списке задач. Поэтому отношение к ней соответствующее. Вы можете обнаружить, что большинство браузеров следует традиции IE идентифицировать себя как Mozilla, и причиной тому является цепная реакция разработчиков.
6. Несоответствие области видимости
Расмотрим следующий код:
// Создаем функцию, которая вызывает другую функцию с именем еквивалентным параметру fn.
function foo(fn) {
if (typeof fn === "function") {
fn();
}
}
// Создает объект со свойством и методом.
var bar = {
barbar : "Всем привет!",
method : function() {
alert(this.barbar);
}
};
bar.method(); // Выводит "Всем привет!"
foo(bar.method); // Если мы вызываем функцию foo и передаем метод "bar.method", будет выдано сообщение об ошибке "undefined."
foo(function() { bar.method(); }); // Выводит "Всем привет!"
Причина того, что foo(bar.method) не выводит такой же результат, заключается в том, что функция метода вызывается как метод объекта окна, а не bar. Для того, чтобы исправить положение мы должны вызвать bar.method() через вызов анонимной функции.
7. Использование побитовых операторов.
JavaScript имеет много похожего на Java. В том числе и побитовые операторы:
- & — И
- | — ИЛИ
- ^ — исключающее ИЛИ
- ~ — НЕ
- > — знаковый сдвиг вправо
- ??? — беззнаковый сдвиг вправо
- << — сдвиг влево
Рассмотрим первый оператор &. Гораздо более эффективно будет использовать оператор &&, так как он будет выполняться быстрее. Так происходит потому, что JavaScript — это не Java, и у него нет типа integer. Поэтому процессы с относительной длиной требуют операции преобразования для операндов, выполняют операцию, а затем происходит обратное преобразование к исходному типу.
Поэтому вместо использования & как «И», и | как «ИЛИ» следует использовать && и ||.
8. Слишком много логических значений false
Может быть это не является ошибкой JavaScript, но очень затрудняет процесс изучения языка. Такие значения как null, false, и undefined почти всегда обозначают одно и тоже, но между ними существует разница, которая вызывает затруднение в понимании.
!!(0); // false
!!(false); // false
!!(''); // false
!!(null); // false
!!(undefined); // false
!!(NaN); // false
Обратите внимание, что все остальные значения обозначают true.
9. Он делает ошибки в арифметических операциях.
JavaScript имеет несколько особенностей при работе десятичными числами. Для примера, откройте консоль, и введите console.log(.2 + .4). Ожидается, что будет выведено «.6», не так ли? Так, но не совсем!
console.log(.2 + .4); // 0.6000000000000001
Как такое происходит? Причина в том, что JavaScript использует стандарт IEEE для арифметики двоичных чисел с плавающей десятичной точкой. Механизм достаточно сложный для объяснения в данной статье, но когда происходит работа с десятичными дробями, результат может немного отличаться от того, что Вы ожидаете. Помните, что целочисленная арифметика точна, и таким образом можно избежать влияния данного пункта на результат работы программы.
10. Выбор стиля кодирования не зависит от Вас!
Когда дело доходит до кодирования, то начинается использование своего собственного стиля. Многие программисты предпочитают ставить скобочки на одной строке с оператором, другие предпочитают переносить на следующую строку:
// Скобочки на одной строке справа
return {
foo : bar
};
// Скобочки на новой строке
return
{
foo : bar
};
В зависимости от того, какую книжку про программирование мы прочитали первой, или от того, что сказал учитель, Вы предпочитаете какой-либо из методов приведенных выше, или оба сразу. Однако в JavaScript это не будет зависеть от Вас!
Рассмотрим приведенные выше выражения. Верите Вы или нет, но они НЕ идентичны. Добавьте следующие строки на какую-нибудь страницу HTML.
var foo = function() {
return {
a : 'b'
};
}();
alert(foo.a); // b
Код просто создает переменную foo, которой присваивается возвращаемый объект. Когда мы вызываем alert(foo.a), то ожидаем увидеть окно сообщения со значением b. Теперь сдвинем открывающуюся скобку от выражения return на одну строку вниз:
return
{
a : 'b'
};
Если Вы запустите страницу в браузере снова, то получитие в окне сообщений инструмента разработчика сообщение об ошибке, такое как «foo is undefined».” И в чем дело!?
Почему JavaScript так реагирует? Потому, что существует нечто, называемое «вставкой точки с запятой». В действительности JavaScript пытается корректировать наш плохой код. Здесь он считает, что Вы пропустили закрывающую точку с запятой, поэтому переходит вперед и добавляет ее для Вас. Хотя в оригинале данное свойство задумывалось как помощь в кодировании, особенно начинающим программистам, в действительности это очень плохая штука, как было продемонстрировано выше.
В нашем примере нет возможности определить, почему foo.a возвращает «undefined». Теперь, когда мы знаем про вставку точки с запятой, причина становится понятной — JavaScript добавил точку с запятой после выражения return.
return; // JS ошибочно добавляет здесь точку с запятой. { a : 'b'; // Здесь также будет добавлена точка с запятой, так как JS не распознает это как объект. };
Надеюсь, что урок был полезен для Вас!
1.При
написании программ на JavaScript используется
набор символов Unicode.
2.
JavaScript игнорирует пробелы,
табуляции и переводы строк,
присутствующие
между
лексемами в программе.
3.
В JavaScript идентификаторы
выступают в качестве названий переменных
и функций, а также меток некоторых циклов
4.
В функции JavaScript
могут передаваться аргументы,
или параметры,
определяющие значение или значения,
для которых она должна выполнять
вычисления
5.
Объекты
в JavaScript могут выступать в качестве
ассоциативных массивов, т. е.
могут
ассоциировать произвольные значения
с произвольными строками.
6.
Главное правило JavaScript заключается в
следующем: операции над элементарными
типами
производятся
по значению, а над ссылочными
типами,
как
и
следует из их названия, – по ссылке.
7.
В JavaScript, где не надо вручную освобождать
память, реализована технология,
называемая
garbage
collection
8.
Выражение
– это
фраза языка JavaScript, которая может быть
вычислена интер_
претатором
для получения значения.
9.
Литерал
объекта
–
это заключенный в фигурные скобки список
свойств, разделенных запятыми
10.
В JavaScript любой объект имеет свойство
constructor,
которое ссылается на функцию конструктор,
используемую для инициализации объекта.
11.
Метод
–
это
не что иное, как функция, которая хранится
в свойстве объекта
и
вызывается посредством этого объекта.
12.
Конструктор
– это
функция, которая выполняет инициализацию
свойств объ_
екта
и предназначена для использования
совместно с инструкцией new.
13.
Оператор void определяет
выражение, которое оценивается без
возвращение значения.
14.Свойство
vspace – строка,
определяющая поле в пикселах между
верхними и нижними гранями изображения
и окружающего текста.
15.Свойство
value – строка, которая
отражает текущее значение поля обьекта
FileUpload.
16.untaint
— функция, которая удаляет tainting
из свойств.
17. toString
– метод, который преобразовывает объект
в строку.
-
taint
– функция, которая добавляет tainting
к свойству. -
Оператор
void определяет
выражение, которое оценивается без
возвращение значения. -
Свойство
vspace – строка,
определяющая поле в пикселах между
верхними и нижними гранями изображения
и окружающего текста. -
Свойство
value – строка, которая
отражает текущее значение поля обьекта
FileUpload. -
untaint
— функция, которая удаляет tainting
из свойств. -
JavaScript
имеет в себе возможность, называемую
данными tainting, которая
сохраняет ограничение защиты , но
обеспечивает механизм работы для
законных приложений.
-
Из
родительского окна во фрейм child поставили
переменную:frames.child.users
= [«Маша», «Паша», «Даша»] -
Каким
образом код, работающий внутри
фрейма,
может кроссбраузерно проверить, является
ли users массивом?Ответы
Правильный
ответВаш
ответif
(users instanceof Array)if
(users instanceof parent.Array)if
(users.constructor.name == «Array»)if(typeof
users == «array») -
Ответы
Правильный
ответВаш
ответНа
внешний валидатор при проверке
соответствия стандартуНа
отображение, работу CSS-свойствНапример,
разная боксовая модель в IE.На
наличие и отсутствие некоторых
свойств в DOMНа
особенности работы XmlHttpRequestDOCTYPE
— атавизм, он ни на что не влияет. -
Каких бинарных операторов нет в javascript?
Ответы
Правильный
ответВаш
ответ*
^
%
#
&
>>
>>>
!
-
Какая
арифметическая операция приводит к
ошибке в javascript?Ответы
Правильный
ответВаш
ответДеление
на нольУмножение
числа на строкуКорень
из отрицательного числаНикакая
из вышеперечисленных -
Может
ли javascript записать файл на компьютер
посетителя ?Ответы
Правильный
ответВаш
ответНет,
ни при каких условияхМожет
в Firefox или IE, при дополнительных
настройках безопасности браузераМожет
в Opera, если javascript запущен локально. -
Какое
из этих ключевых слов ООП не используется
в javascript (1.5) ?Ответы
Правильный
ответВаш
ответthis
instanceOf
super
new
Все
есть -
Можно
ли инициировать DOM-событие из javascript?
Ответы |
Правильный |
Ваш |
|
Да, |
|
|
Методы |
Нет, |
|
|
|
В |
|
|
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
title: Язык JavaScript
description: Только сам JavaScript, без браузерных и иных расширений.
slug: js-basic
questionsToAskCount: 20
weight: 1
questions:
—
content: |
Что получится, если сложить `true + false`?
type: single
answers:
— ‘`»truefalse»`‘
— ‘`0`‘
— ‘`1`‘
— ‘`NaN`‘
correctAnswer: 2
—
content: |
После выполнения этого кода — в каких объектах из списка содержится свойство `name`?
«`js
function User() { }
let vasya = new User();
vasya.__proto__.name = «Vasya»;
«`
type: multi
answers:
— ‘`vasya.__proto__`‘
— ‘`vasya.prototype`‘
— ‘`User.__proto__`‘
— ‘`User.prototype`‘
correctAnswer:
— 0
— 3
—
content: |
Какие варианты подключения скрипта являются корректными с точки зрения современного стандарта HTML?
type: multi
answers:
— ‘`<script type=»text/javascript» src=»my.js»></script>`‘
— ‘`<script src=»my.js»></script>`‘
— ‘`<script src=»my.js»/>`‘
— ‘`<хачу-javascript отсюда=»my.js»>`‘
correctAnswer:
— 0
— 1
—
content: |
Что такое ECMAScript?
type: single
answers:
— Новый язык программирования
— Переработанная реализация JavaScript
— Спецификация языка JavaScript
correctAnswer: 2
—
content: |
Правда ли что `a == b`?
«`js
a = [1, 2, 3];
b = [1, 2, 3];
«`
type: single
answers:
— Правда
— Неправда
— Как повезёт
correctAnswer: 1
—
content: |
Какие конструкции для циклов есть в JavaScript?
type: single
answers:
— ‘Только две: `for` и `while`‘
— ‘Только одна: `for`‘
— ‘Три: `for`, `while` и `do…while`‘
correctAnswer: 2
—
content: |
Какой оператор из этих выполняет не только математические операции?
type: single
answers:
— ‘`*`‘
— ‘`/`‘
— ‘`+`‘
— ‘`-`‘
— ‘`>>>`‘
correctAnswer: 2
—
content: |
Сработает ли вызов функции до объявления в этом коде:
«`js
sayHi();
function sayHi() {
alert(«Hello»);
}
«`
type: single
answers:
— Да, сработает
— Нет, вызов должен стоять после объявления
correctAnswer: 0
—
content: |
Какие из этих вызовов синтаксически верно сгенерируют исключение?
type: multi
answers:
— ‘`throw «Ошибка»`‘
— ‘`throw new Error(«Ошибка»)`‘
— ‘`throw { message: «Ошибка» }`‘
— ‘`throw Error(«Ошибка»)`‘
— Ни один
correctAnswer:
— 0
— 1
— 2
— 3
—
content: |
Сколько параметров можно передать функции?
type: single
answers:
— Ровно столько, сколько указано в определении функции
— Сколько указано в определении функции или меньше
— Сколько указано в определении функции или больше
— Любое количество
correctAnswer: 3
—
content: |
Какие из этих вариантов задают массив из элементов «a», «b»?
type: multi
answers:
— ‘`let a = new Array(«a», «b»)`‘
— ‘`let a = { «a», «b» }`‘
— ‘`let a = ( «a», «b» )`‘
— ‘`let a = [ «a», «b» ]`‘
— ‘`let a = «a,b».split(«,»)`‘
correctAnswer:
— 0
— 3
— 4
—
content: |
Какие варианты правильно объявляют функцию `f`, возвращающую сумму двух аргументов?
type: multi
answers:
— ‘`let f = function(a,b) { return a + b }`‘
— ‘`let f = new Function(«a, b», «return a + b»)`‘
— ‘`let f = new Function(«a», «b», «return a + b»)`‘
— ‘`let f = (a, b) => a + b`‘
— ‘`let f = (a, b) => { a + b }`‘
— Никакие
correctAnswer:
— 0
— 1
— 2
— 3
—
content: |
Что делает код:
«`js
break me;
«`
type: single
answers:
— Ломает интерпретатор JavaScript
— Выходит из текущего блока цикла или switch на метку «me»
— Выдает ошибку
correctAnswer: 1
—
content: |
Есть ли разница между выражениями?
«`js
!!( a && b )
(a && b)
«`
type: single
answers:
— Да
— Нет
— В первом выражении ошибка, что ещё за «!!»??
correctAnswer: 0
—
content: |
Чему равна длина `arr.length` массива `arr`?
«`js
let arr = [];
arr[1] = 1;
arr[3] = 33;
«`
type: single
answers:
— 0
— 1
— 2
— 3
— 4
— Больше
correctAnswer: 4
—
content: |
Чему равно `i` в конце кода?
«`js
for (var i = 0; i < 10; i++) {
console.log(i);
}
// i = ?
«`
type: single
answers:
— ‘`undefined`‘
— ‘`9`‘
— ‘`10`‘
— Нет такой переменной после цикла
correctAnswer: 2
—
content: |
Чему равно `i` в конце кода?
«`js
for (let i = 0; i < 10; i++) {
console.log(i);
}
// i = ?
«`
type: single
answers:
— ‘`undefined`‘
— ‘`9`‘
— ‘`10`‘
— Нет такой переменной после цикла
correctAnswer: 3
—
content: |
Что выведет `sayHi` при вызове через `setTimeout`?
«`js
let name = «Вася»;
function sayHi() {
alert(name);
}
setTimeout(function() {
let name = «Петя»;
sayHi();
}, 1000);
«`
type: single
answers:
— Вася
— Петя
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 0
—
content: |
Существует ли такое значение `X`, которое после присваивания `a = X` вызов `alert(a == X)` выдаст `false`?
«`js
let a = X;
alert(a == X); // false
«`
type: single
answers:
— ‘Да, `X` — это `undefined`‘
— ‘Да, `X` — это `null`‘
— ‘Да, другое‘
— ‘Нет, не бывает‘
correctAnswer: 2
—
content: |
Чему равна переменная `name`?
«`js
let name = «пупкин».replace(«п», «д»)
«`
type: single
answers:
— дудкин
— дупкин
— пупкин
— ляпкин-тяпкин
correctAnswer: 1
—
content: |
Каких операторов из этого списка нет в JavaScript?
type: multi
answers:
— ‘`*`‘
— ‘`^`‘
— ‘`%`‘
— ‘`#`‘
— ‘`&`‘
— ‘`>>`‘
— ‘`>>>`‘
— ‘`!`‘
correctAnswer:
— 3
—
content: |
Чему равно `a + b + c`?
«`js
let a = 1;
let b = { toString() {return ‘1’} };
let c = 1;
«`
type: single
answers:
— ‘`11[object Object]`‘
— ‘`2[object Object]`‘
— ‘`111`‘
— ‘`3`‘
correctAnswer: 2
—
content: |
Что делает оператор `===`?
type: single
answers:
— Сравнивает по ссылке, а не по значению
— Сравнивает без приведения типа
— Нет такого оператора
correctAnswer: 1
—
content: |
Что делает оператор `**`?
type: single
answers:
— Возводит в степень
— Умножает число само на себя
— Нет такого оператора
correctAnswer: 0
—
content: |
Какое из этих слов не имеет специального использования в JavaScript, никак не упомянуто в стандарте?
type: single
answers:
— ‘`this`‘
— ‘`instanceof`‘
— ‘`constructor`‘
— ‘`parent`‘
— ‘`new`‘
— Все имеют специальное использование
correctAnswer: 3
—
content: |
Какая арифметическая операция приводит к ошибке в JavaScript?
type: single
answers:
— Деление на ноль
— Умножение числа на строку
— Корень из отрицательного числа
— Никакая из вышеперечисленных
correctAnswer: 3
—
content: |
Чему равно `0 || «» || 2 || undefined || true || falsе`?
type: single
answers:
— ‘`0`‘
— ‘`»»`‘
— ‘`2`‘
— ‘`undefined`‘
— ‘`true`‘
— ‘`false`‘
correctAnswer: 2
—
content: |
Чему равно `2 && 1 && null && 0 && undefined`?
type: single
answers:
— ‘`2`‘
— ‘`1`‘
— ‘`null`‘
— ‘`0`‘
— ‘`undefined`‘
— ‘`false`‘
correctAnswer: 2
—
content: |
Чему равно `0 || 1 && 2 || 3`?
type: single
answers:
— ‘`0`‘
— ‘`1`‘
— ‘`2`‘
— ‘`3`‘
— ‘`true`‘
— ‘`false`‘
correctAnswer: 2
—
content: |
Что выведет `alert`?
«`js
let arr = [1, 2, 3];
arr.something = 5;
alert(arr.something); // ?
«`
type: single
answers:
— ‘`5`‘
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 0
—
content: |
Что выведет `alert`?
«`js
let str = «Hello»;
str.something = 5;
alert(str.something); // ?
«`
type: single
answers:
— ‘`5`‘
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 2
—
content: |
Что выведет `alert`?
«`js
alert(str); // ?
let str = «Hello»;
«`
type: single
answers:
— ‘`Hello`‘
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 2
—
content: |
Что выведет `alert`?
«`js
alert(str); // ?
var str = «Hello»;
«`
type: single
answers:
— ‘`Hello`‘
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 1
—
content: |
Что выведет этот код?
«`js
for (var i = 0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 100);
}
«`
type: single
answers:
— Числа от 0 до 9
— Числа от 0 до 10
— 10 раз число 0
— 10 раз число 10
— ‘Ошибка: переменная не определена‘
correctAnswer: 3
—
content: |
Что выведет этот код?
«`js
for (let i = 0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 100);
}
«`
type: single
answers:
— Числа от 0 до 9
— Числа от 0 до 10
— 10 раз число 0
— 10 раз число 10
— ‘Ошибка: переменная не определена‘
correctAnswer: 0
—
content: |
Что выведет этот код?
«`js
function User() { }
User.prototype = { admin: false };
let user = new User();
alert(user.admin);
«`
type: single
answers:
— ‘`false`‘
— ‘`undefined`‘
— ‘`true`‘
correctAnswer: 0
—
content: |
Что выведет этот код?
«`js
function User() { }
User.prototype = { admin: false };
let user = new User();
User.prototype = { admin: true };
alert(user.admin);
«`
type: single
answers:
— ‘`false`‘
— ‘`undefined`‘
— ‘`true`‘
correctAnswer: 0
—
content: |
Чему равно `arr.length`?
«`js
function MyArray() { }
MyArray.prototype = [];
let arr = new MyArray();
arr.push(1, 2, 3);
alert(arr.length);
«`
type: single
answers:
— ‘`0`‘
— ‘`undefined`‘
— ‘`3`‘
— ‘В этом коде допущена ошибка‘
correctAnswer: 2
—
content: |
Какое будет выведено значение?
«`js
let x = 5;
alert(x++);
«`
type: single
answers:
— ‘`5`‘
— ‘`6`‘
— Другое
correctAnswer: 0
—
content: |
Выберите правильные варианты объявления массива, то есть такие, в результате которых мы получаем массив из двух чисел `1` и `2`.
type: multi
answers:
— ‘`new Array.prototype.constructor(1, 2)`‘
— ‘`new Array(1, 2)`‘
— ‘`Array(1, 2)`‘
— ‘`[1, 2]`‘
— ‘`1..2`‘
— Все варианты правильные
correctAnswer:
— 0
— 1
— 2
— 3
—
content: |
Чему равно это выражение?
«`js
[].push(1,2).unshift(3).join()
«`
type: single
answers:
— «`3,1`«
— «`1,2,3`«
— «`3,1,2`«
— В коде ошибка
correctAnswer: 3
—
content: |
Какие варианты вызова `try..catch` являются синтаксически верными в JavaScript?
type: multi
answers:
— ‘`try { … }` без `catch/finally`‘
— ‘`try { … } catch { … }`‘
— ‘`try { … } finally { … }`‘
— ‘`try { … } catch { … } finally { … }`‘
— ‘В JavaScript не поддерживается `try..catch`‘
correctAnswer:
— 1
— 2
— 3
—
content: |
Язык JavaScript является подвидом языка Java — верно?
type: single
answers:
— Да
— Нет
— Наоборот, Java — подвид JavaScript
correctAnswer: 1
—
content: |
Что выведет этот код?
«`js
f.call(f);
function f() {
alert(this);
}
«`
type: single
answers:
— ‘`[object Object]`‘
— ‘Код функции `f`‘
— ‘Ошибка: слишком глубокая рекурсия‘
— ‘Ошибка: переменная `f` не определена‘
— другое
correctAnswer: 1
correctAnswerComment: |
Функция `f` определяется при входе в область видимости, так что на первой строке она уже есть.
Далее вызов `f.call(f)` вызывает функцию, передавая ей `f` в качестве `this`, так что выводится строковое представление `f`.
—
content: |
Что выведет этот код?
«`js
let f = function g() { return 23; };
alert(typeof g());
«`
type: single
answers:
— ‘`number`‘
— ‘`undefined`‘
— ‘`function`‘
— Ошибка
correctAnswer: 3
correctAnswerComment: |
Ошибка, так как это Named Function Expression.
—
content: |
Что выведет этот скрипт?
«`js
«use strict»;
a = null + undefined;
alert(a);
«`
type: single
answers:
— ‘`null`‘
— ‘`undefined`‘
— ‘`NaN`‘
— В коде ошибка
correctAnswer: 3
correctAnswerComment: |
Переменная не определена, в строгом режиме все переменные должны быть определены.
—
content: |
Что выведет этот код?
«`js
let y = 1;
let x = y = 2;
alert(x);
«`
type: single
answers:
— ‘`1`‘
— ‘`2`‘
— ‘`NaN`‘
— ‘`undefined`‘
— Будет ошибка
correctAnswer: 1
correctAnswerComment: |
Двойное присваивание выполняется справа налево. То есть сначала `y` станет `2`, а потом `x = y`.
—
content: |
Что выведет этот код?
«`js
f.call(null);
function f() {
alert(this);
}
«`
type: single
answers:
— ‘`null`‘
— ‘`undefined`‘
— В коде ошибка
— Другое
correctAnswer: 0
correctAnswerComment: |
В строгом режиме `call` передаёт в качестве `this` именно то, что указано.
—
content: |
Чему будет равен `this`?
«`js
let user = {
sayHi: function() {
alert(this);
}
};
(user.sayBye = user.sayHi)();
«`
type: single
answers:
— ‘`null`‘
— ‘`undefined`‘
— ‘Объекту `user`‘
— В коде ошибка
correctAnswer: 1
correctAnswerComment: |
Контекст вызова теряется при операциях с методом объекта.
—
content: |
Чему равна сумма `[] + 1 + 2`?
type: single
answers:
— ‘`3`‘
— ‘`NaN`‘
— ‘`undefined`‘
— ‘`»12″`‘
— ‘`12`‘
— Другое
correctAnswer: 3
correctAnswerComment: |
Первым делом объект `[]` превращается в примитив. У него нет `valueOf` (с примитивным результатом), так что вызывается `toString` и возвращает список элементов через запятую, т.е. пустую строку.
Получается сложение `»» + 1 + 2`. Далее, так как один из аргументов — строка, то оператор `»+»` преобразует второй тоже к строке, и в итоге получится строка `»12″`.
—
content: |
Верно ли, что `null == undefined`?
type: single
answers:
— Да
— Нет
correctAnswer: 0
correctAnswerComment: |
Преобразования типов здесь не происходит.
Оператор `==` работает с `null/undefined` без преобразования, все варианты сравнений прописаны в спецификации.
—
content: |
Что выведет этот код?
«`js
if (function f(){}) {
alert(typeof f);
}
«`
type: single
answers:
— ‘`undefined`‘
— ‘`function`‘
— ‘`null`‘
— ‘`object`‘
— В коде ошибка
correctAnswer: 0
correctAnswerComment: |
Функция задана как Named Function Expression, поэтому её имя не видно снаружи.
—
content: |
Чему равен результат вызова в этом примере?
«`js
function f() {
let a = 5;
return new Function(‘b’, ‘return a + b’);
}
alert(f()(1));
«`
type: single
answers:
— ‘`1`‘
— ‘`6`‘
— ‘`undefined`‘
— ‘`NaN`‘
— Будет ошибка
correctAnswer: 4
correctAnswerComment: |
Ошибка, так как функция, созданная через `new Function`, не имеет доступа к текущему замыканию.
—
content: |
Объявлена функция:
«`js
function F() {}
«`
Верно ли, что `F instanceof Function`?
type: single
answers:
— Да
— Нет
correctAnswer: 0
—
content: |
Объявлена функция:
«`js
function F() {}
«`
Чем является `F.prototype`?
type: single
answers:
— ‘Обычным объектом‘
— ‘Функцией‘
— ‘Равен `undefined`‘
correctAnswer: 0
—
content: |
Что выведет этот код?
«`js
function F() { return F; }
alert(new F() instanceof F);
alert(new F() instanceof Function);
«`
type: single
answers:
— ‘`false`, `false`‘
— ‘`false`, `true`‘
— ‘`true`, `false`‘
— ‘`true`, `true`‘
correctAnswer: 1
correctAnswerComment: |
Если функция, запущенная через `new`, возвращает объект (не примитив!), то именно этот объект служит результатом, вместо `this`. Так что результатом `new F` является сама функция `F`.
Поэтому получается, что первый `alert` проверяет: `F instanceof F`. Это неверно, т.к. `a instanceof B` проверяет, был ли объект `a` создан конструктором `B` (с учетом прототипов, но здесь это неважно). Функция `F` не была создана собой же, а является объектом встроенного класса `Function`, поэтому `false`.
Следующая строка идентична такой проверке: `F instanceof Function`. Это верно.
—
content: |
Чему равен `typeof null` в режиме строгом режиме?
type: single
answers:
— ‘`null`‘
— ‘`undefined`‘
— ‘`object`‘
— ‘`string`‘
correctAnswer: 2
correctAnswerComment: |
Это особенность спецификации JavaScript. Значением оператора `typeof null` является строка `»object»`.
—
content: |
Что выведет этот код?
«`js
alert(«1″[0]);
«`
type: single
answers:
— ‘`0`‘
— ‘`1`‘
— ‘`2`‘
— ‘`undefined`‘
— В коде ошибка
correctAnswer: 1
correctAnswerComment: |
Первый символ строки `»1″` — это `»1″`.
—
content: |
Что выведет этот код?
«`js
alert(20e-1[‘toString’](2));
«`
type: single
answers:
— ‘`2`‘
— ‘`10`‘
— ‘`20`‘
— ‘`NaN`‘
— В коде ошибка
correctAnswer: 1
correctAnswerComment: |
<ol>
<li>Запись числа `20e-1` означает `20`, сдвинутое на 1 знак после запятой, т.е. `2`:
«`js
//+ run
alert(20e-1); // 2
«`
</li>
<li>У каждого числа есть метод `toString(radix)`, который преобразует число в строку, используя `radix` как основание системы счисления. В этом коде `radix = 2`. Так что возвращается `2` в двоичной системе: `»10″`.
</li>
</ol>
—
content: |
Что выведет этот код?
«`js
alert(+»Infinity»);
«`
type: single
answers:
— ‘`Infinity`‘
— ‘`NaN`‘
— ‘`0`‘
— Будет ошибка
correctAnswer: 0
correctAnswerComment: |
`Infinity` — числовое значение (бесконечность).
—
content: |
Что выведет этот код?
«`js
let a = (1,5 — 1) * 2;
alert(a);
«`
type: single
answers:
— ‘`0.999999999`‘
— ‘`1`‘
— ‘`0.5`‘
— ‘`8`‘
— ‘`-0.5`‘
— ‘`4`‘
correctAnswer: 3
correctAnswerComment: |
Оператор «запятая», вычисляемый в скобках, возвращает последнее вычисленное значение. То есть, `1` игнорируется и возвращается `4` (`5 — 1`).
Затем идёт умножение на два, в результате — `8`.
—
content: |
Что выведет этот код? Посмотрите на него очень внимательно, в этом вопросе есть подвох.
«`js
let a = [1, 2]
(function() { alert(a) })()
«`
type: single
answers:
— ‘`[object Array]`‘
— ‘`[object Object]`‘
— ‘`1,2`‘
— Будет ошибка
correctAnswer: 3
correctAnswerComment: |
Пропущена точка с запятой после `let a = [1, 2]`.
Браузер автоматически не вставляет её перед скобкой, поэтому интерпретирует это как:
«`js
let a = [1, 2](function() { alert(a) })()
«`
…То есть, пытается вызвать массив `[1, 2]` как функцию, что, естественно, не выходит. Отсюда и ошибка.
—
content: |
Верно ли сравнение: `»ёжик» > «яблоко»`?
type: single
answers:
— ‘Да‘
— ‘Нет‘
— Зависит от локальных настроек браузера
correctAnswer: 0
correctAnswerComment: |
В JavaScript строки сравниваются посимвольно. Символы соотносятся как их коды.
В кодировке Unicode код буквы `»ё»` больше кода буквы `»я»`. Поэтому `»ёжик»` больше.
—
content: |
Какой результат будет у выражения ниже?
«`js
null + {0:1}[0] + [,[1],][1][0]
«`
type: single
answers:
— ‘`0`‘
— ‘`1`‘
— ‘`2`‘
— ‘`undefined`‘
— ‘`NaN`‘
correctAnswer: 2
correctAnswerComment: |
Подробнее вычисления:
<ol>
<li>`null` превращается в `0`</li>
<li>`{0:1}` — это объект, у которого ключ `0` имеет значение `1`
«`js
{0:1}[0] == 1
«`
</li>
<li>
Второе слагаемое `[,[1],]` — это массив с 3-мя элементами. Элемент с индексом `1` — это массив `[1]`. Берём от него первый элемент:
«`js
[,[1],][1][0] == 1
«`
</li>
</ol>
—
content: |
Что выведет выражение ниже?
«`js
let a = new Array(1,2), b = new Array(3);
alert(a[0] + b[0]);
«`
type: single
answers:
— ‘`1`‘
— ‘`4`‘
— ‘`undefined`‘
— ‘`NaN`‘
correctAnswer: 3
correctAnswerComment: |
Дело в том, что `new Array(1,2)` создаёт массив из элементов `[1,2]`, а вот `new Array(3)` — это особая форма вызова `new Array` с одним численным аргументом. При этом создаётся массив без элементов, но с длиной. Любой элемент этого массива равен `undefined`.
«`js
//+ run
let a = new Array(1,2), b = new Array(3);
alert(a[0]); // 1
alert(b[0]); // undefined
«`
При арифметических операциях `undefined` становится `NaN`, поэтому и общий результат — `NaN`.
—
content: |
Яблоко стоит 1.15, апельсин стоит 2.30.
Сколько стоят они вместе — чему равна сумма `1.15 + 2.30` с точки зрения JavaScript?
type: single
answers:
— ‘`345`‘
— ‘`3.45`‘
— ‘`3,45`‘
— Ни один из вариантов выше
correctAnswer: 3
correctAnswerComment: |
При сложении десятичных дробей проявляются ошибки округления, поэтому сумма будет другой:
«`js
//+ run
alert(1.15 + 2.30);
«`
—
content: |
Что выведет код ниже?
«`js
let obj = {‘1’: 0, 1: 1, 0: 2};
alert(obj[‘1’]);
«`
type: single
answers:
— ‘`0`‘
— ‘`1`‘
— В коде ошибка
correctAnswer: 1
correctAnswerComment: |
При задании объекта через `{…}` — кавычки не обязательны, они нужны лишь в случаях, когда без них нельзя, например:
«`js
let obj = { «строка с пробелами» : 123 }
«`
Все ключи приводятся к строке. Поэтому второй ключ равен первому и перезаписал его.
—
content: |
Что выведет код ниже?
«`js
for (let key in {1:1, 0:0}) {
alert(key);
}
«`
type: single
answers:
— ‘`1`, затем `0`‘
— ‘`0`, затем `1`‘
— В коде ошибка
— Зависит от браузера
correctAnswer: 1
correctAnswerComment: |
Все современные браузеры сортируют цифровые ключи.
—
content: |
Есть ли различия между проверками:
«`js
if ( x <= 100 ) {…}
// и
if ( !(x > 100) ) {…}
«`
type: single
answers:
— ‘Да, существует значение `x`, для которого они работают по-разному‘
— ‘Нет, они полностью взаимозаменяемы.‘
— Зависит от браузера.
correctAnswer: 0
correctAnswerComment: |
Различие будет при `x = NaN` (или любого другого значения, которое преобразуется к `NaN`).
—
content: |
Внимательно посмотрите на синтаксис этого кода. Что он выведет?
«`js
let f = function(x) {
alert(x)
}
(function() {
f(1)
}())
«`
type: single
answers:
— Никакого результата
— ‘Выведет `1`‘
— ‘Выведет `undefined`‘
— Будет ошибка
correctAnswer: 3
correctAnswerComment: |
Ошибка из-за отсутствия точки с запятой в строке `(*)`:
«`js
//+ run
let f = function(x) {
alert(x)
} // (*)
(function() {
f(1)
}())
«`
JavaScript не вставляет точку с запятой на этом месте, так как ниже идёт открывающая скобка. Поэтому этот код воспринимается так:
«`js
let f = function(x) {
alert(x)
}(function() { f(1) }())
«`
—
content: |
Что выведет этот код?
«`js
let obj = {
«0»: 1,
0: 2
};
alert( obj[«0»] + obj[0] );
«`
type: single
answers:
— ‘`2`‘
— ‘`3`‘
— ‘`4`‘
— ‘`12`‘
— В коде ошибка
correctAnswer: 2
correctAnswerComment: |
Дело в том, что у объектов в JavaScript ключи всегда строковые. Если в качестве ключа передано что-то ещё, то оно приводится к строке. Значения обрабатываются в порядке поступления, поэтому `0: 2` перекроет `»0″: 1`.
В итоге получится объект с единственным ключом: `{«0» : 2}`.
При доступе к ключу — `obj[«0»]` и `obj[0]` эквивалентны, опять же, поскольку ключ приводится к строке.
—
content: |
Чему равно такое выражение?
«`js
[] + false — null + true
«`
type: single
answers:
— ‘`0`‘
— ‘`NaN`‘
— ‘`undefined`‘
— ‘`1`‘
correctAnswer: 1
correctAnswerComment: |
Шаги преобразования:
<ol>
<li>`[] + false = «false»`, т.к массив `[]` преобразуется к пустой строке, выходит `»» + false = «false»`.</li>
<li>Далее `»false» — null = NaN`, т.к. вычитание преобразует к числу, получается `NaN — 0 = NaN`.</li>
<li>…дальнейшие вычисления с `NaN` дают `NaN`</li>
</ol>
—
content: |
Чему равно значение выражения `4 — «5» + 0xf — «1e1″`?
type: single
answers:
— ‘Цифре‘
— ‘Строке‘
— ‘`NaN`‘
correctAnswer: 0
correctAnswerComment: |
<ol>
<li>Первый минус превратит строку `»5″` в число `5`</li>
<li>Далее идёт сложение с числом 15, записанным в 16-ричной форме.</li>
<li>Далее строка содержит число, записанное в научной форме: `1e1 = 10`, минус преобразует эту строку в число.</li>
</ol>
Получается:
«`js
4 — 5 + 15 — 10 = 4
«`
—
content: |
Переменные `apple` и `Apple` (с большой буквы) — это одна и та же или разные?
type: single
answers:
— Одна и та же
— Разные
— С большой буквы переменные называть нельзя
— Слово «apple» является зарезервированным, нельзя использовать
correctAnswer: 1
—
content: |
Есть ли разница между вызовами `i++` и `++i`?
type: single
answers:
— Разница в значении, которое возвращает такой вызов
— «Разница в значении `i` после вызова«
— Нет никакой разницы
correctAnswer: 0
—
content: |
Какие вызовы `parseInt` возвратят число?
type: multi
answers:
— ‘`parseInt(«1px»)`‘
— ‘`parseInt(«-1.2»)`‘
— ‘`parseInt(«0 минут»)`‘
— ‘`parseInt(«$1.2»)`‘
correctAnswer:
— 0
— 1
— 2
—
content: |
Какой код корректно найдёт максимальное значение в непустом массиве `arr`?
type: multi
answers:
— «`arr.reduce(function(prev, item) { return Math.max(prev, item) })`«
— «`Math.max.apply(null, arr)`«
— «`Math.max(arr)`«
— ‘`arr.findMax()`‘
correctAnswer:
— 0
— 1
1.При
написании программ на JavaScript используется
набор символов Unicode.
2.
JavaScript игнорирует пробелы,
табуляции и переводы строк,
присутствующие
между
лексемами в программе.
3.
В JavaScript идентификаторы
выступают в качестве названий переменных
и функций, а также меток некоторых циклов
4.
В функции JavaScript
могут передаваться аргументы,
или параметры,
определяющие значение или значения,
для которых она должна выполнять
вычисления
5.
Объекты
в JavaScript могут выступать в качестве
ассоциативных массивов, т. е.
могут
ассоциировать произвольные значения
с произвольными строками.
6.
Главное правило JavaScript заключается в
следующем: операции над элементарными
типами
производятся
по значению, а над ссылочными
типами,
как
и
следует из их названия, – по ссылке.
7.
В JavaScript, где не надо вручную освобождать
память, реализована технология,
называемая
garbage
collection
8.
Выражение
– это
фраза языка JavaScript, которая может быть
вычислена интер_
претатором
для получения значения.
9.
Литерал
объекта
–
это заключенный в фигурные скобки список
свойств, разделенных запятыми
10.
В JavaScript любой объект имеет свойство
constructor,
которое ссылается на функцию конструктор,
используемую для инициализации объекта.
11.
Метод
–
это
не что иное, как функция, которая хранится
в свойстве объекта
и
вызывается посредством этого объекта.
12.
Конструктор
– это
функция, которая выполняет инициализацию
свойств объ_
екта
и предназначена для использования
совместно с инструкцией new.
13.
Оператор void определяет
выражение, которое оценивается без
возвращение значения.
14.Свойство
vspace – строка,
определяющая поле в пикселах между
верхними и нижними гранями изображения
и окружающего текста.
15.Свойство
value – строка, которая
отражает текущее значение поля обьекта
FileUpload.
16.untaint
— функция, которая удаляет tainting
из свойств.
17. toString
– метод, который преобразовывает объект
в строку.
-
taint
– функция, которая добавляет tainting
к свойству. -
Оператор
void определяет
выражение, которое оценивается без
возвращение значения. -
Свойство
vspace – строка,
определяющая поле в пикселах между
верхними и нижними гранями изображения
и окружающего текста. -
Свойство
value – строка, которая
отражает текущее значение поля обьекта
FileUpload. -
untaint
— функция, которая удаляет tainting
из свойств. -
JavaScript
имеет в себе возможность, называемую
данными tainting, которая
сохраняет ограничение защиты , но
обеспечивает механизм работы для
законных приложений.
-
Из
родительского окна во фрейм child поставили
переменную:frames.child.users
= [«Маша», «Паша», «Даша»] -
Каким
образом код, работающий внутри
фрейма,
может кроссбраузерно проверить, является
ли users массивом?Ответы
Правильный
ответВаш
ответif
(users instanceof Array)if
(users instanceof parent.Array)if
(users.constructor.name == «Array»)if(typeof
users == «array») -
Ответы
Правильный
ответВаш
ответНа
внешний валидатор при проверке
соответствия стандартуНа
отображение, работу CSS-свойствНапример,
разная боксовая модель в IE.На
наличие и отсутствие некоторых
свойств в DOMНа
особенности работы XmlHttpRequestDOCTYPE
— атавизм, он ни на что не влияет. -
Каких бинарных операторов нет в javascript?
Ответы
Правильный
ответВаш
ответ*
^
%
#
&
>>
>>>
!
-
Какая
арифметическая операция приводит к
ошибке в javascript?Ответы
Правильный
ответВаш
ответДеление
на нольУмножение
числа на строкуКорень
из отрицательного числаНикакая
из вышеперечисленных -
Может
ли javascript записать файл на компьютер
посетителя ?Ответы
Правильный
ответВаш
ответНет,
ни при каких условияхМожет
в Firefox или IE, при дополнительных
настройках безопасности браузераМожет
в Opera, если javascript запущен локально. -
Какое
из этих ключевых слов ООП не используется
в javascript (1.5) ?Ответы
Правильный
ответВаш
ответthis
instanceOf
super
new
Все
есть -
Можно
ли инициировать DOM-событие из javascript?
Ответы |
Правильный |
Ваш |
|
Да, |
|
|
Методы |
Нет, |
|
|
|
В |
|
|
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #