Вопрос: Какое значение будет у foo?
var foo = 10 + '20';
Ответ: '1020'. Приведение типов преобразует 10 в строку и сложит 2 строки.
Вопрос: Что будет выведено в консоль?
console.log(0.1 + 0.2 == 0.3);
Ответ: false. Из-за плавающей точки результатом вычисления будет 0.30000000000000004. Чтобы справится с этой проблемой нужно округлять числа до десятков.
Вопрос: Как сделать так, чтобы приведенный ниже код работал?
add(2, 5); // 7
add(2)(5); // 7
Ответ:
function add(a, b) {
return a && b ? a + b : function (c) { return a + c; };
}
Вопрос: Какое значение будет возращено?
"i'm a lasagna hog".split("").reverse().join("");
Ответ: 'goh angasal a m\'i'
Вопрос: Какое значение будет у window.foo?
( window.foo || ( window.foo = "bar" ) );
Ответ: 'bar'
Вопрос: Какой будет результат приведенного ниже кода?
var foo = "Hello";
(function() {
var bar = " World";
alert(foo + bar);
})();
alert(foo + bar);
Ответ:
Hello World
из функции.ReferenceError: bar is not defined
т.к переменнаяbar
бар определена в области видимости функции и не видна за ее пределами.
Вопрос: Чему равно foo.length?
var foo = [];
foo.push(1);
foo.push(2);
Ответ: 2;
Вопрос: Чему равно foo.x?
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Ответ: undefined
.
foo.x = foo = {n: 2}
то же, что и foo.x = (foo = {n: 2})
. foo
на которую ссылается foo.x
"устанавливается" перед тем, как foo
изменится. foo.x
ссылается на старое значение foo
. Это значит, что в старом foo
появится новое свойство x
равное {n: 2}
. А в новое foo
запишется {n: 2}
. Значение старого foo
находится в bar
.
{
n: 1,
x: {
n: 2
}
}
Так как при дальнейшем выводе foo.x
наше foo
ссылается на его новое значение, в котором отстутствует x
, то foo.x
будет неопределено.
Вопрос: Что будет выведено в консоль?
console.log('one');
setTimeout(function() {
console.log('two');
}, 0);
Promise.resolve().then(function() {
console.log('three');
})
console.log('four');
Ответ: 'one', 'four', 'three', 'two'. setTimeout
часть основной очереди (main task queue), тогда как Promise
в miscro task queue, которая выполняется перед основной. Поэтому сначала выведентся 'three', а потом 'two'.
Вопрос: Написать функцию, которая принимает 2 строки и возвращает результат их лексикографического сравнения.
// dog dgo -> true
// dog dfo -> false
// doog ddog -> false
const check = (s1, s2) => {
const l1 = s1.split("").sort();
const l2 = s2.split("").sort();
return l1.join("") === l2.join("");
};
console.log(check("dog", "dgo"));
console.log(check("dog", "dfo"));
console.log(check("doog", "ddog"));
Ответ: для решения задачи нужно разбить две строки посимвольно, используя метод split, и полученные массивы отсортировать по возрастанию с использованием стандартного метода sort. После этого к отсортированным применить метод join, который создаст из них строки, и сравнить эти строки. Результат сравнения вернуть из функции.