Это моя первая статья о том, как начать
Всем привет, меня зовут Бай Ци, я впервые публикую статью о Наггетс. Я недавно готовился к интервью, поэтому я хотел бы поделиться с вами несколькими вопросами для интервью, которые я считаю довольно интересными в банке вопросов для интервью, который я недавно просматривал. (личное мнение Кайдзи, не распыляйте ово, если вам не нравится)
1. В чем разница между Object.is() и исходными операторами сравнения "==" и "==="?
- Два знака равенства равны, и при сравнении будет выполняться преобразование типов;
- Три знака равно равны (суждение строгое), при сравнении не выполняется неявное преобразование типов (если типы разные, будет возвращено false);
- Object.is() специально обрабатывает NaN, -0 и +0 на основе суждения о трех равенствах, гарантируя, что -0 и +0 больше не совпадают, аObject.is(NaN,NaN) вернет true.
- Object.is() следует рассматривать для его специального назначения, и его не следует использовать, чтобы думать, что он слабее или строже, чем другие сравнения равенства.
2. Каковы преимущества виртуального DOM?
На самом деле ответ, который хочет услышать интервьюер, состоит не в том, чтобы сказать, что «производительность прямых/частых манипуляций с DOM плохая». Если производительность манипуляций с DOM настолько невыносима, то jQuery не будет так популярен. Таким образом, интервьюер действительно хочет услышать о проблеме, которую хочет решить VDOM, и почему частые операции с DOM будут иметь низкую производительность.
Для начала нам нужно знать: движок DOM и движок JS не зависят друг от друга, но работают в одном потоке (главном потоке). Когда JS-код вызывает DOM API, он должен приостановить работу JS-движка, преобразовать входящие данные параметров, активировать DOM-движок, преобразовать возможные возвращаемые значения после перерисовки DOM и, наконец, активировать JS-движок и продолжить выполнение при частых Вызовы DOM API и просмотр Если производитель сервера не выполняет оптимизацию "пакетной обработки", удельные затраты на переключение между движками будут быстро накапливаться. потребление производительности.
Второе — это разница и оптимизация VDOM и реального DOM:
- Виртуальный DOM не сразу выполняет операции набора и перерисовки
- Виртуальный DOM часто модифицируется, а затем части, которые необходимо изменить в реальном DOM, сравниваются и модифицируются одновременно, и, наконец, верстка и перерисовка выполняются в реальном DOM, чтобы уменьшить потери при верстке и перерисовке лишнего. DOM-узлы.
- Виртуальный DOM эффективно сокращает перерисовку и верстку большой области реального DOM, потому что окончательное сравнение с реальным DOM отличается, и может быть отрендерена только часть.
3. В чем разница между введением модуля в common.js и es6?
Common.js — это спецификация модуля, которая изначально применялась к Nodejs и стала спецификацией модуля Nodejs. JavaScript, работающий на стороне браузера, также не имеет подобных спецификаций.До выхода ES6 интерфейс также реализовывал набор той же спецификации модуля (например: AMD) для управления модулями интерфейса. Начиная с ES6, был введен новый набор спецификаций модуля ES6, который реализует функцию модуля на уровне языкового стандарта, и реализация довольно проста, ожидается, что он станет общим модульным решением для браузеров и серверов. Однако в настоящее время браузер не очень совместим с модулем ES6.Экспорт и импорт, которые мы обычно используем в Webpack, будут преобразованы Babel в спецификацию CommonJs.
Основные отличия в использовании:
- Модуль CommonJs выводит копию значения, модуль ES6 выводит ссылку на значение, модуль CommonJS загружается во время выполнения, а модуль ES6 является интерфейсом вывода времени компиляции.
- CommonJs — это экспорт одного значения, модуль ES6 может экспортировать несколько
- CommonJs — это динамическая грамматика, которая может быть написана на суждениях, а статическая грамматика модуля ES6 может быть написана только на верхнем уровне.
- Этот модуль CommonJs является текущим модулем, а этот модуль ES6 не определен.
4. Что означает использовать строго в коде JS? В чем разница между до и после использования?
use strict — это (строгий) режим запуска, добавленный ECMAscript5, который заставляет Javascript работать в более строгих условиях. Цель установления «строгого режима» в основном заключается в следующем:
- Устраните некоторые необоснованные и неточные аспекты синтаксиса Javascript и уменьшите количество странного поведения Устраните некоторые небезопасные аспекты работы кода, чтобы обеспечить безопасность работы кода;
- Улучшить эффективность компилятора и увеличить скорость работы;
- Чтобы проложить путь для будущих новых версий Javascript.
разница:
- Использование оператора with запрещено.
- Ключевому слову this запрещено указывать на глобальный объект.
- Объекты не могут иметь свойства с одинаковыми именами.
Пожалуйста, используйте JS, чтобы определить, является ли данная строка изоморфной.
Идея: вы можете использовать функцию карты в JS, чтобы определить значение и индекс строки.
Код:
const isIsomorphic = (s, t) => {
if (s === t || s === '') return true
let mapS = new Map(), mapT = new Map()
for (let i = 0; i < s.length; i++) {
if (mapS.has(s[i]) || mapT.has(t[i])) {
if (mapS.get(s[i]) !== mapT.get(t[i])) return false
}
mapS.set(s[i], i)
mapT.set(t[i], i)
}
return true
}