Если вы ищете вопросы, основанные на коде JavaScript, для практики на собеседовании или мозгового штурма, то я бы сказал, что вы находитесь в нужном месте, чтобы учиться. Я постараюсь осветить все каверзные и ключевые вопросы, которые не являются теоретической частью JavaScript.

Для лучшего понимания я бы рекомендовал взять ручку и бумагу и попытаться сначала решить их, это будет хорошим началом.

1. Каковы будут выходные данные приведенных ниже строк кода?

console.log("11"-1);                          // 10
console.log("11"+1);                          // "111"
console.log(0 === [[[0]]]);                   // false
console.log(0 == [[[0]]]);                    // true
console.log(0 === "0");                       // false
console.log(0 == "0");                        // true
console.log([1,[2,[3,[4,[5]]]]].toString())   // 1,2,3,4,5

2. Как эффективно преобразовать многомерный массив в одномерный массив?

const arr = [1,[2,[3,[4,[5]]]]]
const dArray = arr.toString().split(',').map((num) => Number(num))

Тестовый массив объявляется для проверки нашего кода в первой строке. В следующей строке мы преобразовали тестовый массив в строковый формат после того, как наш результат будет выглядеть как «1,2,3,4,5». Последним шагом будет разделение на основе «,» и преобразование в число.

3. Создайте числовые обещания от 1 до 10 со случайной задержкой и распечатайте их непрерывными сериями от 1 до 10.

const delay = (val, ms) => new Promise(resolve => setTimeout(resolve(val), ms));
const promiseArr = []
for(let i=1; i<=10;i++) {
    promiseArr.push(delay(i, Math.random()%5));
}
const result = Promise.all(promiseArr)
result.then(res => {
    console.log(res) // [1,2,3,4,5,6,7,8,9,10]
})

Функция задержки создает новое обещание с заданным значением и задержкой.

Метод Promise.all() принимает итерацию промисов в качестве входных данных и возвращает один Промис, который разрешается в массив результатов входных промисов. Это возвращенное обещание будет выполнено, когда все обещания ввода будут выполнены или если итерация ввода не содержит обещаний. Он немедленно отклоняет любое из входных обещаний, отклоняющих или не промисов, выдающих ошибку, и отклоняет это первое сообщение об отклонении/ошибке.

4. Как проверить, является ли значение объекта объектом или нет?

typeof yourVariable === 'object' && yourVariable !== null

5. Как создать собственный переключатель в JavaScript?

const match = (expr, allCases) => {
  return allCases[expr] || allCases?.default;
}
const allCases = {
  Hi: 'good morning',
  Red: "color",
  BMW: "my favourite",
  default: "not available"
 }
const matched = match('Hi', allCases)
const notMatched = match('Not', allCases)
console.log(matched)      // Good Morning
console.log(notMatched)   // not available

Функция match принимает все случаи и ваше выражение для сопоставления; если ваше выражение не существует, оно найдет выражение по умолчанию. allCases — это объект ключевого значения, который содержит все наши дела.

6. Что будет на выходе приведенного ниже кода?

const a = Number(1)
const b = Number(2)
const c = "1"
const d = "2"
console.log(typeof a * b)          // NaN
console.log(typeof c * d)          // NaN
console.log(typeof a * c)          // NaN
console.log((a*b) == (c*d))        // true
console.log((a*b) === (c*d))       // true
console.log(typeof Number(a * b))  // number
console.log(typeof Number(c * d))  // number

7. Что будет на выходе приведенного ниже кода?

const arr = [1,2,3,4]
arr.length = 0;   // don't do this in your life
console.log(arr)  // []
console.log("1" - "2" + "3" + "4" * "5")
// first * occurs and result will be 
// "1" - "2" + "3" + "20"
// now left to right flow goes
// "-1" + "3" + "20"
// "-1320"

8. У нас есть три промиса с именем и задержкой: (медленно, 200), (быстро, 50), (мгновенно, 0), и все они должны разрешаться одновременно, а порядок должен поддерживаться в медленных, быстрых и мгновенных сериях. .

const slow = new Promise(resolve => {
 setTimeout(resolve, 200, 'slow');
});
const instant = new Promise(resolve => {
 setTimeout(resolve, 0, 'instant');
}); ;
const quick = new Promise(resolve => {
 setTimeout(resolve, 50, 'quick');
});
const result = Promise.all([slow, quick, instant])
result.then((res) => {
    console.log(res)
})

9. Что выведет приведенный ниже код?

var a={name:"RKstar"}
var b={name:"RKstar"}
console.log(a===b); // false
console.log(a==b);  // false

10. Если массив является экземпляром объекта, то как вы будете различать объект или массив? Как вы напишете программу, чтобы продемонстрировать разницу между ними?

console.log(diff([]))   // Array
console.log(diff({}))   // Object
console.log(diff(null)) // Null or Undefined
function diff(obj) {
    if(Object.prototype.toString.call(obj) === '[object Array]') {
        return 'Array'
    } else if(typeof obj === 'object' && obj !== null) {
        return 'Object'
    } else {
        return 'Null or Undefined'
    }
}

Несколько вопросов теоретического и на основе кода. Пожалуйста, не стесняйтесь комментировать свое решение здесь.

В чем разница между null и undefined?

Напишите синтаксический анализатор JSON, не используя встроенный синтаксический анализатор JSON.

И это подводит нас к концу! Большое спасибо за то, что дочитали до конца — если эта статья была полезна в каком-либо смысле, я был бы признателен за подписку, которая поможет мне достичь моей цели. :)

Не стесняйтесь посетить мой веб-сайт, и если у вас есть какие-либо вопросы, связанные с JS/DevOps, не стесняйтесь связаться со мной.

https://ritikchopra.netlify.app

Удачи!
Ритик Чопра😘

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.