написать впереди
Первый раз, когда я пошел на собеседование, интервьюер спросил меня 0,1 + 0,2 __ 0,3? Подсчитано, что многие люди знают, что 0,1 + 0,2 != 0,3 в JS, но я действительно не понимаю, больше это или меньше.
В JS много подобных извращенных проблем, поэтому Xiaolu просто отсортировал их в серию, надеясь еще больше укрепить свой фундамент JS и надеясь, что вы сможете успешно получить предложение на собеседовании.
1. Путаница в обучении
Позвольте мне сначала рассказать о путанице, с которой я столкнулся раньше: изучение многих базовых знаний JS поначалу было не таким гладким, особенно когда я впервые столкнулся с JS, потому что в истории JS остались некоторые ошибки, и это слабо типизированный язык. язык. , не так ясно, как многие понятия в других объектно-ориентированных строго типизированных языках.
2. Изучите предложения
Глубоко изучать при первом контакте не рекомендуется.Достаточно знать много знаний,типа почему null определяется как объектный тип через typeof.В начале вы знаете только что он определяется как объект введите через typeof. Когда понимать принципы этих точек знаний?
Если вам лень, пока не изучайте его, если вас интересуют его принципы, вы, естественно, научитесь исследовать. Однако, когда дело доходит до собеседования, когда интервьюер задает вам этот вопрос, он будет задавать вас рекурсивно. В то время вам придется изучить принципы. Вы обнаружите, что эти принципы разбросаны. , - сказал этот человек Ист, тот человек сказал Веста, а потом я сам изучил его по качественным статьям и организовал в серию.
карта разума
1. Классификация основных типов
Существует два основных типа JS: примитивные типы и объектные типы.
Что такое примитивные типы? Какие бывают типы объектов? Почему они классифицируются таким образом? В чем их отличие?
Примитивные типы хранят значения, а объектные типы хранят адреса. Как показано ниже:
Как показано на рисунке выше, мы ясно поняли самое фундаментальное различие между примитивными типами и объектными типами.Тогда проблема возникает снова.Когда мы присваиваем значения между переменными, примитивный тип напрямую присваивает значение, в то время как объектный тип присваивает адрес.
Таким образом, когда мы передаем объект в качестве параметра, внутри функции изменяется объект, на который указывает адрес, а если переданный параметр является типом-примитивом, то изменяется копия (копируется другое значение). То есть, если это объект, исходное значение изменяется, но исходное значение исходного типа изменить нельзя.
Существует шесть примитивных типов, которыеString、Number、Boolean、null、undefined、symbol.
Далее мы решаем задачи в этих шести типах примитивов одну за другой.
2. ноль
Существует историческая ошибка, связанная с нулевым значением, является ли нуль типом объекта? Хотя мы используем typeof для проверки того, что null является типом объекта, на самом деле это ошибка.
2.1 В чем причина?
Поскольку первоначальная версия JS является 32-разрядной системой, для хранения информации о типе переменной в младших битах для повышения производительности начало 000 представляет объект, а нуль представляет все нули в это время, поэтому система неправильно оценивает нуль. как тип объекта. Хотя код внутреннего суждения JS был изменен, эта ошибка осталась.
2.2. Резюме появления null
1. Вручную установить значение переменной или значение свойства объекта равным нулю (не присваивайте значение в данный момент, оно будет присвоено позже).
2. При получении элемента DOM JS, если указанный объект элемента не получен, результат обычно равен нулю.
3. Значение Object.prototype._proto_ также равно null.
4. При обычном захвате, если результат не получен, значение по умолчанию также равно null.
3. символ
Используется относительно немного символов, но они существуют не просто так.
3.1 Что такое символы?
Символ представляет собой уникальное значение, потому что, поскольку все свойства объекта являются строковыми типами, мы не можем избежать проблемы конфликта одной и той же строки. Таким образом, чтобы предотвратить атрибуты объекта, все строковые типы и конфликт введены.
3.2 Использование символов
// 通常参数是字符串类型,如果为对象类型,就会调用 toString 方法
let s1 = Symbol(参数);// 这个参数可以认为是 Symbol 实例的一个描述,用于区分
// 第一种写法
let a = {};
a[s1] = 'Hello!';
// 第二种写法
let a = {
[s1] = 'Hello';
}
4. не определено
4.1 Что происходит с undefined?
1. Продвижение переменной: объявите только, что значение по умолчанию undefined не определено.
2. В строгом режиме: нет четкого тела выполнения, это не определено.
3. Объект не имеет имени этого свойства, и значение свойства не определено.
4. Параметр определения функции не передает значение, и значение по умолчанию не определено.
5. Функция не имеет возвращаемого значения (no return или return;), а возвращаемое значение по умолчанию не определено.
5. Почему 0,1 + 0,2 != 0,3?
О некоторых подводных камнях, связанных с типами данных, мы говорили выше. Почему возникает ситуация неравенства? Как ответить интервьюеру?
5.1 Чем вызвана эта ситуация?
Причина очень проста, JS использует версию с двойной точностью, а в этой версии есть проблемы с точностью, что приводит к описанной выше ситуации.
5.2 Каков внутренний принцип?
Вся информация нашего компьютера преобразуется в двоичный файл для хранения, тогда двоичное представление 0,1 является бесконечно повторяющимся десятичным числом.Эта версия JS использует стандарт чисел с плавающей запятой и должна перехватывать этот бесконечно повторяющийся двоичный код, что приводит к потере точности ., 0,1 больше не 0,1, 0,1 становится 0,100...001 после перехвата, а 0,2 становится 0,200...002. Таким образом, сумма этих двух величин больше 0,3.
Ну, так как 0,1 не равно 0,1, почему я вывожу console.log(0,1) на консоль и все равно равно 0,1?
Поскольку при преобразовании входного содержимого двоичное число преобразуется в десятичное, а затем десятичное число преобразуется в строку, во время этого преобразования происходит приближение, поэтому печатается приблизительное значение.
Если вы расскажете интервьюеру вышеперечисленные принципы, интервьюеру сложно не сделать вам предложение, ха-ха, шучу, получение предложения зависит не только от основ, но и от других ваших комплексных способностей.
резюме
Сегодня мы в основном обобщаем знания об основах JS.Хотя эти знания относительно ямочны и сложны, после разбора они становятся намного понятнее.В статье могут быть проблемы, на которые можно указать Xiaolu.
Это не только основы, но и наиболее часто задаваемые интервьюеры в интервью.Методы опроса интервьюеров в разных компаниях также очень разные.Поэтому в пунктах знаний, обобщенных выше, есть много недостатков.Приглашаем всех добавить.
❤️ Не забывайте оставлять свои следы[Нравится + Избранное + Комментарий]
После прочтения статьи почему бы не поставить лайк? Хи-хи, значит, вы очень эгоистичны и боитесь, что такую хорошую статью увидят другие. Просто шучу.
На самом деле, я также очень эгоистичен.Я тайно даю вам свою официальную учетную запись: «Xiaolu Animation Learning Programming», которая объединяет структуру данных и алгоритм, сетевой принцип, Интернет и другие технические статьи, объясненные Xiaolu в форме анимации.
Авторская информация:
【Автор】:Сяолу
[Исходный публичный аккаунт] Программирование обучения анимации Xiaolu
[Введение]: вместе с Xiaolu мы изучим программирование с нуля с помощью анимации и представим нашим друзьям внешний веб-домен, структуру данных и алгоритм, сетевые принципы и т. д. в простой для понимания форме.Официальный аккаунт отвечает на «данные», чтобы получить множество материалов для самостоятельного изучения с нуля!
【Инструкции по перепечатке】: Пожалуйста, укажите источник перепечатки, спасибо за сотрудничество! ~