Головоломный JavaScript¶
Время от времени в сети мне попадаются различные WTF примеры на JavaScript. Часто на первый взгляд они выглядят безумно, но на самом деле просты и логичны, поэтому я решил попробовать их собирать и разбирать. Кроме очевидного профита в виде более глубого понимаю языка это еще и отличные вопросы для собеседований)
Чтобы было интереснее я буду прятать ответ и решение под спойлер.
1. Так что помните, дети, всегда подставляем системы счисления!¶
Для начала простой, но прикольной пример. Что вернут такие вызовы parseInt?
parseInt('fuck');
parseInt('fuck', 16);
3. Кто больше?¶
Ну и кто больше?
[1, 2, 4] < [1, 2, 5]
[1, 2, 'd'] < [1, 2, 5]
[1, 2, ['d', 5]] < [1, 2, [20, 5]]
[1, 2, 5] == [1, 2, 5]
[1, 2, 5] <= [1, 2, 5]
[1, 2, 5] >= [1, 2, 5]
4. Кто больше?-2¶
По мотивам предыдущей загадки, точнее её решения.
var obj1 = {
test: 'test',
toString: function(){ return 10; },
valueOf: function(){ return 100; }
}
var obj2 = {
test: 'test',
toString: function(){ return 100; },
valueOf: function(){ return 10; }
}
obj1 ? obj2
5. Бесконечности безумия¶
Что вернет?
parseFloat('Infinity');
Number('Infinity');
parseInt('Infinity');
6. Игры с плюсами¶
Для тех, кто внимательно читал предыдущие решения, не составит труда сказать, что вернет вот такое выражение:
"foo" + + "bar"
9. “Булева арифметика”¶
(true + 1) === 2;
(true + true) === 2;
true === 2;
true === 1;
Заключение¶
Сколько задачек с первого раза отгадали правильно?) Надеюсь вам понравились небольшие взрывы мозга. По субъективным ощущениям, разбор таких ситуаций очень полезен. Лично для меня это оказалось единственным поводом вдумчиво почитать спецификацию ES, т.к. в обычной жизни мой код достаточно аккуратен, чтобы не создавать таких ситуаций.
И да, главное: не используйте это в боевом коде! Пожалейте тех, кто будет его читать)
Комментариев нет:
Отправить комментарий