Comments 13
Проверить значение переменной на соответствие
NaNможно, воспользовавшись встроенным методомisNaN()или используя оператор тройного равенства===
Оператор строгого равенства (а не тройного), не сработает. NaN === NaN вернёт false.
Можно использовать оператор остатка
....
Это не оператор остатка
В чем разница между
undefinedиis not definedВ чем разница между
null,undefinedиundeclared
Серьёзный вопрос
Для этого можно использовать встроенный метод
isArray()
Встроенный метод чего? Как его вызвать?
Благодаря поднятию мы можем использовать функции и переменные до их объявления в коде. Однако, следовать учитывать, что поднимаются только объявления, но не присваивания значений.
Покажите пример использование переменной до её объявления
Array.prototype.forEach- это инструмент обхода цикла процедурно, аArray.prototype.map- функционально.
Можно подробнее?
Не смотря на то, что многие вопросы в стать е действительно спорные. Но я могу ответить на часть поставленных вами.
Оператор строгого равенства (а не тройного), не сработает. NaN === NaN вернёт false.
Благодаря этому мы и определим :)
function myIsNaN(value) {
// Тут используем строгое равенство :)
return (value === value) === false;
}Покажите пример использование переменной до её объявления
Так можно делать с var (но не нужно!) и с функциями.
myFunc();
function myFunc() {
x = 5
console.log(x);
var x = 2
}В оригинале
The main difference is that
mapreturns a new array whileforEachdoesn’t.Also,
mapdoesn’t mutate the original array instead makes a new modified/updated copy.I would always pick
mapbecause it does allow method chaining
Перевод
Array.prototype.forEach- это инструмент обхода цикла процедурно, аArray.prototype.map- функционально.
.forEachпросто проходится по массиву с выполнением переданного обратного вызова на каждой итерации, а.mapсоздает и возвращает новый массив на основе исходного, выкладывая по кирпичику на каждой итерации.
¯\_(ツ)_/¯
У меня нет опыта прохождения собеседований, поэтому спрошу: это вопросы, которые задаются условному react-разрботчику между вопросами про фреймворк/библиотеку, чтобы понять, что человек знает не только react, но и сам язык? Или где-то есть собеседования, где ищут разработчиков на голом JS и спрашивают только вот такое? Мне кажется, это довольно простые вопросы, и если верно второе предположение, то это странная разработка, в которой задачи достаточно простые (не разработка своего убийцы ангуляра), но не захотели брать фреймворк, а зачем-то решили писать без всего, что, скорее всего, приведёт к созданию собственного подобия фреймворка или библиотеки.
Скорее всего эти вопросы для отсеивания тех условных react-разработчиков, которые начали свой путь в разработке сразу с условного react и умеют только "формочки верстать"
Я спрашиваю пдобные вопросы на собеседовании. Процентов 70 не могут вообще или затрудняются на них ответить. Если не отвечают на эти к вопросам по React я даже не перехожу.
Вот мой .push() в список фактических ошибок в вопросах. Точнее, в данном случае ошибка в ответе:
В JavaScript это поведение называется приведением типов. Если хотя бы один из операндов является строкой, второй также будет преобразован в строку.
Совсем наоборот, операнды арифметических выражений в JS как раз приводятся к числу. Можете проверить сами:
"3" - 2 // 1
3 * "2" // 6
"2" ** "3" // 8Исключением является оператор +. Он используется как для сложения, так и для конкатенации строк. Если хотя бы один операнд не является числом, операция интерпретируется как конкатенация и оба значения приводятся к строке:
1 + {} // "1[object Object]"Как видите, при этом совсем не обязательно, чтобы "один из операндов являлся строкой".
В целом вопросы неплохие, на собеседованиях вполне можно несколько таких задать. Некоторые правда очень зависят от контекста, например тот же "В чем разница между атрибутами и свойствами". Но может это и к лучшему и исправлять ничего не надо — хороший разработчик обязательно уточнит, а плохой начнёт угадывать.
В чем разница между ES6
classи ES5function constructor?Классы, добавленные в стандарте EcmaScript 6, всего лишь синтаксический сахар поверх всем известных прототипов.
На Хабре вроде была статья, что ES6 не просто синтаксический сахар ^_^
PS Мне скоро 30 и совсем недавно я начал замечать, что собеседующие 25 и младше задают именно такие вопросы, а 35 и выше, совсем другие. Например, в двух словах рассказать, как построить архитектуру приложения для решения заданой задачи.
Что такое SPA и как сделать его SEO-friendly?
И когда это вдруг SPA перестало быть SEO-friendly? Наверное тогда, когда кто-то решил что SPA это обязательно client-side rendering.
Удивительно что люди не знают о том, что первые SPA делались даже в ИЕ6, то есть где то в 2002 году. А полностью полноценными они стали с появлением возможности изменять state в History APi. Кажется в 2010 году.
Объясните разницу между изменяемыми и неизменяемыми значениями
Значения примитивных типов (например, строка или число) не могут быть изменены после того, как попали в память.
В JavaScript нет примитивных типов и никогда не было. Глава 6 ECMA Spec.
Всегда было любопытно, откуда возник этот странный миф о примитивных и ссылочных типах, и почему он до сих пор занимает чуть ли не первое место в умах JS разработчиков.
Возможно потому, что никто из них не любит читать спецификацию языка, на котором пишет.
Значения объектных типов (объекты, массивы) могут изменяться в ходе работы программы.
Все типы в JS работают абсолютно одинаково. Никакой разницы в том, каким образом происходит работа с данными в обьекте или в строке - нет. И там и там данные имутабельны.
В чем разница между let, const и var?
var объявляет переменную, которая может быть переопределена
Под словом переопределенная видимо подразумевается то, что можно опять писать var.
Любопытно то, что на уровне bytecode ignition, конструкции типа
var a='str1';
var a='str2';
let b='str3'
b ='str4'приведут к генерации абсолютно идентичного кода.
221 S> 0x27c9c7b0c952 @ 12 : 12 02 LdaConstant [2]
0x27c9c7b0c954 @ 14 : 26 f9 Star r2
237 S> 0x27c9c7b0c956 @ 16 : 12 03 LdaConstant [3]
0x27c9c7b0c958 @ 18 : 26 f9 Star r2
253 S> 0x27c9c7b0c95a @ 20 : 12 04 LdaConstant [4]
0x27c9c7b0c95c @ 22 : 26 f8 Star r3
260 S> 0x27c9c7b0c95e @ 24 : 12 05 LdaConstant [5]
0x27c9c7b0c960 @ 26 : 26 f8 Star r3Иными словами, сакральное знание о переопределении бесполезно чуть более чем полностью.
Так же любопытно, почему о бесполезном переопределении так много написано, а о том, что обязан знать каждый JS разработчик использующий let или const - то есть о TDZ ни слова.
35 вопросов с собеседования JavaScript-разработчика