Фронтенд-интервью (резюме личной коллекции) HTML-статьи
Фронтенд-интервью (резюме личной коллекции) CSS статьи
Передняя часть интервью (резюме личной коллекции) javascript Часть (b)
JS Сколько видов основных типов данных
undefined
, null
, boolean
, string
, number
PS: Новое в ES6symbol
Типы
Ссылаться на:Типы данных JavaScript и их обнаружение
Переменные JS классифицируются по этим типам в соответствии с их методами хранения и описывают их характеристики.
-
тип значения
-
тип ссылки
Ссылаться на:Низкий порог для полного понимания глубокого и поверхностного копирования в JavaScript.
Какие типы можно получить с помощью typeof в JS
неопределенный, строка, число, логическое значение, функция, объект
В частности, объекты, массивы и null являются объектами (хотя функции являются ссылочными типами, их можно распознать), поскольку typeof не может различать ссылочные типы.
Ps: вы можете получить новые в ES6symbol
Типы
Как определить, является ли переменная типом массива
Можно использоватьinstanceof
ключевые слова
Возьмите каштан:
var arr = []
arr instanceof Array //true
Array.isArray(arr) //true
Когда использовать '===' и когда использовать '=='
-
Двойное и т. д. будет автоматически принудительно преобразовано, что рискованно.
-
В исходном коде jQuery рекомендуется использовать третий класс, что я лично и написал. Double и т. д. могут использоваться для оценки логических значений.
Ссылаться на:Полный конец неявным преобразованиям типов за Javascript
Напишите пример наследования
//构造函数方式
function Animal { this.name = 'pig' }
function Animal2 { Animal.call(this); this.age = 18 }
console.log(new Animal2())
//缺点:无法继承Animal的原型对象
//原型链方式
function Animal { this.name = 'pig' }
function Animal2 { this.age = 18 }
Animal2.prototype = new Animal();
console.log(new Animal2())
//缺点:实际上是共享,修改原型对象里的内容,其它继承的类也会同步修改
//组合方式
function Animal { this.name = 'pig' }
function Animal2 { Animal.call(this); this.age = 18 }
Animal2.prototype = Animal.prototype;
console.log(new Animal2())
//缺点:由于引用同一个原型对象,无法区分对象是由谁实例化的
//最终方式
function Animal { this.name = 'pig' }
function Animal2 { Animal.call(this); this.age = 18 }
Animal2.prototype = Obiect.create(Animal.prototype);
Animal2.prototype.constructor = Animal2;
console.log(new Animal2())
//解释:通过创建新的对象,不再是同一个,再指定构造函数属性为自己
Несколько способов создания объектов
-
буквальный
-
объект
-
Конструктор
-
object create
Описать процесс создания нового объекта
-
Создайте пустой объект и наследуйте объект-прототип
-
Выполните конструктор, это указывает на этот пустой объект
-
Возвращает новый объект, если возвращаемое значение является объектом, в противном случае возвращает объект
Ваше понимание подъема переменных
При выполнении кода объявления переменных и функций поднимаются наверх области видимости (где переменная имеет значение undefined )
Если он глобальный, он будет перемещен в начало скрипта.
Если он находится внутри функции, он будет перемещен в начало функции, и это также
PS: Обратите внимание на регистр функциональных выражений (анонимные функции)
PS2: обратите внимание, что в ES6let
случай, без переменного подъема
Проиллюстрируйте несколько различных сценариев использования этого
-
Выполнить как конструктор
-
Выполнить как свойство объекта
-
Выполнить как обычную функцию
-
call
apply
bind
Создайте 10 тегов, нажмите, чтобы открыть соответствующий серийный номер
for(var i=0;i<10;i++){
(function(i){
var a = document.createElement('a');
a.innerHtml=i+'<br>';
a.onclick=function(e){
e.preventDefault();
alert(i)
}
document.body.appendChild(a)
})(i)
}
Как понять охват
Есть только области функций и глобальные области, а в ES6 добавлены области на уровне блоков.
Переменные, объявленные вне функции, имеют глобальную область видимости и могут использоваться внутри функции.
Переменные, объявленные внутри функции, относятся к области действия функции и не могут использоваться вне функции.
Цепочка областей действия: процесс, посредством которого свободная переменная проходит весь путь вверх, чтобы найти переменные в своей родительской области (когда она была определена).
Свободные переменные: переменные, не определенные в текущей области
ps: использовать внутри фигурных скобокlet
Объявить переменные областью действия на уровне блоков и использовать только внутри для уменьшения глобального загрязнения.
Знаете о закрытии?
Замыкания: специальные функции, которые используют одну функцию для доступа к внутренним переменным другой функции.
Сценарий использования: каррирование функций
Ссылаться на:Tickets.WeChat.QQ.com/Yes/G9Hi JW H-5…
В чем разница между синхронным и асинхронным?
Синхронный блокирует выполнение кода, асинхронный нет.
Внешний интерфейс с использованием асинхронных сценариев?
-
Дела по расписанию:
setTimeout
setInverval
-
Сетевой запрос: запрос ajax, динамическийнагрузка
-
привязка события
Краткое описание механизма работы JS
- Один поток: механизм JS, триггеры событий и триггеры синхронизации являются однопоточными.
- Очередь задач: JS делится на синхронные задачи и асинхронные задачи.После того, как все синхронные задачи в стеке выполнения будут выполнены (движок JS в это время простаивает), система прочитает очередь задач и добавит исполняемые асинхронные задачи в исполняемый стек. ., Начать выполнение.
- Цикл событий (механизм цикла событий): когда код в стеке выполнения вызывает некоторые API, в очередь событий добавляются различные события. будет выполняться цикл процесса.
Ссылаться на:Дай Личунь.com/2018/01/21/…
процессы и потоки
- Процесс: работающее приложение, рабочая среда приложения и наименьшая единица распределения ресурсов ЦП.
- Поток: построен на основе процесса, используется для выполнения операций (например, выполнения кода), является наименьшей единицей планирования процессора, процесс может иметь несколько потоков.
Получить случайное число, для которого требуется строковый формат той же длины
var random = Math.random();
var random = random+'00000000';
var random = random.slice(0,10);
Напишите общую функцию forEach, которая перебирает объекты и массивы.
function foreach(obj,fn){
var key;
if(obj instanceof Array){
obj.forEach(function(item,index){
fn(index,item)
})
}else{
for(key in obj){
fn(key,obj[key])
}
}
}
Как получить текущую метку времени в JavaScript
-
Date.now()
-
new Date().getTime()
-
+new Date()