50 базовых знаний JavaScript, с которыми столкнулись на работе

внешний интерфейс JavaScript ECMAScript 6
50 базовых знаний JavaScript, с которыми столкнулись на работе

Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.

предисловие

Всем привет, я Линь Сансинь,Основа является предпосылкой передовых, сегодня я поделюсь с вами 50 "базовыми баллами знаний", с которыми я столкнулся в своей работе за последний год.У меня есть привычка записывать баллы знаний в течение года, ха-ха.

50 очков базовых знаний

1. Сколько типов данных есть в JavaScript?

  • номер: тип номера
  • строка: строковый тип
  • boolean: логический тип значения
  • неопределенный: неопределенный тип
  • null: тип нулевого значения
  • объект: тип объекта
  • символ: тип символа
  • bigint: тип большого числа

2, максимальный безопасный номер JavaScript и минимальный безопасный номер?

console.log(Number.MAX_SAFE_INTEGER)
// 9007199254740991

console.log(Number.MIN_SAFE_INTEGER)
// -9007199254740991

3. В чем разница между глубоким копированием и поверхностным копированием?

  • Глубокая копия копирует слой за слоем, неглубокая копия копирует только первый слой, а глубокая копия копирует только

  • В глубокой копии изменения в новом объекте не влияют на исходный объект, тогда как в поверхностной копии изменения в новом объекте следуют за изменениями в исходном объекте.

  • В глубокой копии исходный объект не имеет тех же свойств, что и новый объект, а в поверхностной копии они имеют те же свойства.

4. Что такое замыкание?

Замыкание — это функция, которая может читать переменные внутри других функций.

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

пример:

function a () {
  let num = 0
  
  // 这是个闭包
  return function () {
     return ++num
  }
}
const b = a()
console.log(b()) // 1
console.log(b()) // 2

5. Что такое цепочка прототипов? Будьте подробнее!

Посмотрите мою статью:Наггетсы говорят о «цепочке прототипов», которую лучше всего и проще всего понять.

6. Что такое переменное продвижение? Продвижение функций?

переменное продвижение

console.log(name) // undefined
var name = 'Sunshine_Lin'

if (false) {
  var age = 23
}
console.log(age) // undefined 不会报错

функция подъема

console.log(fun) // function fun() {}
function fun() {}

if (false) {
  function fun2(){}
}
console.log(fun2) // undefined 不会报错

Приоритет продвижения функции > Приоритет продвижения переменной

console.log(fun) // function fun() {}
var fun = 'Sunshie_Lin'
function fun() {}
console.log(fun) // 'Sunshie_Lin'

7. В чем разница между isNaN и Number.isNaN?

  • isNaN: в дополнение к оценке того, что NaN является истинным, он также будет судить о том, что его нельзя преобразовать в число как истинное, например «xxx»
  • Number.isNaN: true только при оценке NaN, false в противном случае

8. При решении задачи обхода объекта, что делать, если обходятся свойства на прототипе?

использоватьhasOwnPropertyсудить

function Person(name) {
  this.name = name
}
Person.prototype.age = 23
const person = new Person('Sunshine_lin')
for (const key in person) { console.log(key) } // name age
// 使用 hasOwnProperty
for (const key in person) {
  person.hasOwnProperty(key) && console.log(key)
} // name

9. valueOf и toString

  • 1,valueOfпредвзятое отношение к операциям,toStringпредпочитаю показывать
  • 2. Когда объект преобразуется, он вызывается первымtoString
  • 3. Строго преобразованные строки вызываются первымиtoString, принудительно поверните номер, чтобы позвонить первымvalueOf
  • 4. В обычных обстоятельствах сначала позвонитеtoString
  • 5. В случае с оператором он вызывается первымvalueOf

вызов valueOf

абонент возвращаемое значение тип возвращаемого значения
Array сам массив Array
Boolean Логическое значение Boolean
Date миллисекунды Number
Function сама функция Function
Number числовое значение Number
Object сам объект Object
String нить String

вызов toString

абонент возвращаемое значение тип возвращаемого значения
Array Массив в строку, эквивалентный Array.join() String
Boolean Преобразование строки «истина», «ложь» String
Date Строковая дата, например «Пт, 23 декабря 2016 г., 11:24:47 GMT+0800 (стандартное китайское время)». String
Number числовая строка String
Object '[object Object]' String
String нить String

10. Какова конкретная форма хранения переменных JavaScript в памяти?

  • Базовый тип данных: существует栈内存внутри
  • Тип ссылочных данных: хранилище указателей栈内存,направление堆内存Адрес среднего блока, содержимое хранится в куче памяти
  • Также есть поговорка, что на самом деле все данные в JavaScript хранятся堆内存, я тоже согласен с этим утверждением

11. Расскажите мне о упаковке и распаковке JavaScript?

Бокс: операция преобразования примитивного типа данных в соответствующий ссылочный тип данных.

Посмотрите на следующий код, s1 — это просто базовый тип данных, как он может вызватьindexOfкак насчет?

const s1 = 'Sunshine_Lin'
const index = s1.indexOf('_')
console.log(index) // 8

Получается, что операция упаковки выполняется внутри JavaScript

  • 1. Создайте экземпляр типа String;
  • 2. Вызвать указанный метод на экземпляре;
  • 3. Уничтожить экземпляр;
var temp = new String('Sunshine_Lin')
const index = temp.indexOf('_')
temp = null
console.log(index) // 8

Распаковка: операция преобразования ссылочного типа данных в соответствующий базовый тип данных.

пройти черезvalueOfилиtoStringспособ распаковки

var objNum = new Number(123);  
var objStr =new String("123");   
console.log( typeof objNum ); //object
console.log( typeof objStr ); //object 
console.log( typeof objNum.valueOf() ); //number
console.log( typeof objStr.valueOf() ); //string

console.log( typeof objNum.toString() ); // string 
console.log( typeof objStr.toString() ); // string

12. В чем сходство и различие между null и undefined?

Та же точка

  • пустые переменные
  • все ложные значения, превратите логические значения в ложные
  • null == не определено верно

разница

  • typeof оценивает null как объект и оценивает как undefined как undefined
  • Null для числа равен 0, undefined для числа равен NaN
  • null - это объект, который не инициализирован, undefined инициализирован, но присваивание undefined
  • null === undefined является ложным

13. Как определить тип данных?

  • typeof xxx: может определить число, строку, неопределенное, логическое значение, объект, функцию (null - это объект)
  • Object.prototype.toString.call(xxx): может определять большинство типов.
  • Array.isArray(xxx): определить, является ли это массивом

14. Почему тип объекта null?

Различные типы данных представлены двоичным кодом внизу, а первые три бита двоичного кода000будут судить какobjecttype, а двоичный код внизу null равен 0, поэтому первые три также должны быть000, поэтому оценивается какobject

15. В чем разница между == и ===?

  • ==: при сравнении будет неявное преобразование
  • ===: Один и тот же тип и одно и то же значение должны быть истинными

16. Правила неявного преобразования в JavaScript?

  • 1. Преобразование в тип строки: + (соединитель строки)

  • 2. Преобразование в числовой тип: ++/-- (оператор самоувеличения и самоуменьшения) + - * / % (арифметический оператор) > =

  • 3. Преобразование в логический тип: !(логический оператор НЕ)

17. Каковы правила преобразования левой и правой сторон двойного знака равенства?

  • 1. null == undefined верно

  • 1. Если один из операндов является булевым, преобразовать его в число перед сравнением на равенство - false преобразуется в 0, а true преобразуется в 1;

  • 2. Если один операнд является строкой, а другой операнд является числом, перед сравнением равенства преобразуйте строку в число.

  • 3. Если один операнд является объектом, а другой нет, вызовите метод toString() объекта и используйте полученное значение базового типа для сравнения в соответствии с предыдущими правилами.

18. Почему undefined >= undefined false?

в соответствии с隐式转换规则, который может быть преобразован вNaN >= NaN, NaN не равно NaN и не больше, поэтомуfalse

19. Почему null >= null верно?

в соответствии с隐式转换规则, который может быть преобразован в0 >= 0, 0 равно 0, поэтомуtrue

20. Почему [] == ![] верно?

в соответствии с双等号左右两边的转换规则

  • 1,!приоритет над==,[]не является ложным значением, поэтому сначала преобразуйте в[] == false
  • 2. Правая часть — логическое значение,falseСначала конвертируйте числа0, поэтому его можно преобразовать в[] == 0
  • 3. Левая сторона - объект,[]перечислитьtoStringПреобразовать в'', который преобразуется в'' == 0
  • 4. Левая сторона - струна,''преобразовать в0, и наконец0 == 0

21. 0,1 + 0,2 === 0,3, верно?

Нет, есть проблема потери точности в вычислениях JavaScript

console.log(0.1 + 0.2 === 0.3) // false
  • Причина: десятичные дроби в JavaScript — это числа с плавающей запятой, которые необходимо преобразовать в двоичные для работы.Некоторые десятичные дроби не могут быть представлены в двоичном виде, поэтому их можно только аппроксимировать, что приводит к ошибкам
  • Решение:
    • Сначала преобразовать в целочисленную арифметику, а затем обратно в десятичную.
    • Производительность toFixed() не очень хорошая, не рекомендуется

22. Что такое анонимная функция?

Анонимная функция: функция без имени функции, например:

(function(x, y){
    alert(x + y);  
})(2, 3);

Здесь создается анонимная функция (в первых скобках), а вторые скобки используются для вызова анонимной функции с передачей параметров.

23. Сколько существует способов привязки событий кликов?

три

  • xxx.onclick = function (){}
  • <xxx onclick=""></xxx>
  • xxx.addEventListener('click', function(){}, false)

24. Что такое третий параметр addEventListener?

Третья переменная передает логическое значение, нужно ли предотвращать пузырение, по умолчанию false, что не предотвращает пузырение

25. В чем разница между объявлением функции и выражением функции?

  • Объявления функций: наслаждайтесь подъемом функций
  • Функциональные выражения: классифицируйте как объявления переменных, наслаждайтесь подъемом переменных
  • Приоритет продвижения функции > Приоритет продвижения переменной
console.log(fun) // fun () {}
// 函数表达式
var fun = function(name) {}
// 函数声明
function fun () {}
console.log(fun) // fun (name) {}

26. Какие существуют модели потока событий в JavaScript?

  • Всплытие событий: принимается наиболее специфичным элементом и распространяется вверх.
  • Захват события: получен наименее специфичным элементом и распространен вниз
  • Поток событий DOM: захват событий -> целевая стадия -> всплывающая подсказка событий

27. В чем разница между Ajax, Axios и Fetch?

  • Ajax: это инкапсуляция объекта XMLHttpRequest (XHR).
  • Axios: это инкапсуляция объектов XHR на основе Promise.
  • Fetch: это метод окна, также основанный на Promise, но он не имеет ничего общего с XHR и не поддерживает IE.

28. В чем разница между load, $(document).ready и DOMContentLoaded?

Шаги для загрузки документа DOM:

  • 1. Разберите структуру HTML.
  • 2. Загрузите внешние скрипты и файлы таблиц стилей.
  • 3. Разберите и выполните код скрипта.
  • 4. Строится DOM-дерево. //DOMContentLoadedкурок,$(document).readyкурок
  • 5. Загрузите внешние файлы, такие как изображения.
  • 6. Страница загружается. //loadкурок

29. Как предотвратить всплытие событий?

function stopBubble(e) {
  if (e.stopPropagation) {
    e.stopPropagation()
  } else {
    window.event.cancelBubble = true;
  }
}

30. Как предотвратить поведение событий по умолчанию?

function stopDefault(e) {
  if (e.preventDefault) {
    e.preventDefault();
  } else {
    window.event.returnValue = false;
  }
}

31. Что такое делегирование событий?

Когда всем дочерним элементам необходимо привязать одно и то же событие, событие можно привязать к родительскому элементу, т.е.事件委托, преимущества:

  • Привязку к родительскому элементу нужно привязать только один раз, что снижает производительность.
  • Дочерние элементы не должны связывать одно и то же событие.
  • Если в будущем будет добавлен новый дочерний элемент, он автоматически получит прослушиватель событий родительского элемента из-за делегирования события.

32. Как реализовать дедупликацию массива?

// 使用 Map 去重
function quchong1(arr) {
  const newArr = []
  arr.reduce((pre, next) => {
    if (!pre.get(next)) {
      pre.set(next, 1)
      newArr.push(next)
    }
    return pre
  }, new Map())
  return newArr
}

// 使用 Set 去重
function quchong (arr) {
    return [...new Set(arr)]
}

33. В чем разница между набором и массивом?

Рекомендуется прочитать статью г-на Жуань Ифэна:Установить и сопоставить структуры данных

34. В чем разница между Картой и Объектом?

Рекомендуется прочитать статью г-на Жуань Ифэна:Установить и сопоставить структуры данных

35. Что такое NaN? Каковы характеристики?

  • NaN не равен самому себе, т.е.NaN === NaNзаfalse
  • NaN ложно, превратите логическое значениеfalse
  • NaN по сути является числом,typeof NaN === number

36. Какие существуют методы борьбы с асинхронностью?

  • Перезвони
  • promise
  • прослушиватель событий
  • опубликовать подписаться
  • async await

37. Сколько методов наследования существует в JavaScript?

Предварительная работа

// 定义一个动物类
function Animal (name) {
  // 属性
  this.name = name || 'Animal';
  // 实例方法
  this.sleep = function(){
    console.log(this.name + '正在睡觉!');
  }
}
// 原型方法
Animal.prototype.eat = function(food) {
  console.log(this.name + '正在吃:' + food);
};

1. Наследование цепочки прототипов

Ядро: используйте экземпляр родительского класса в качестве прототипа дочернего класса.

function Cat(){ 
}
Cat.prototype = new Animal();
Cat.prototype.name = 'cat';

var cat = new Cat();
console.log(cat.name); // cat
cat.eat('fish') // cat正在吃:fish
cat.sleep() // cat正在睡觉!
console.log(cat instanceof Animal); //true 
console.log(cat instanceof Cat); //true

преимущество:

  • 1. Очень чистое отношение наследования, экземпляр является экземпляром подкласса и экземпляром родительского класса.
  • 2. Родительский класс добавляет методы/свойства прототипа, к которым могут обращаться подклассы.
  • 3. Простота и удобство реализации

недостаток:

  • 1. Чтобы добавить свойства и методы в подклассы, вы должныnew Animal()Выполнить после такого оператора и не может быть помещен в конструктор
  • 2. Все свойства объекта-прототипа являются общими для всех экземпляров.
  • 3. При создании дочернего экземпляра нельзя передавать параметры конструктору родительского класса
  • 4. Множественное наследование не поддерживается

2. Конструктивное наследование

Ядро: использование конструктора родительского класса для улучшения экземпляра подкласса эквивалентно копированию атрибутов экземпляра родительского класса в подкласс (без использования прототипа).

function Cat(name) {
  Animal.call(this);
  this.name = name || 'Tom';
}

var cat = new Cat();
console.log(cat.name); // Tom
cat.sleep() // Tom正在睡觉!
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

преимущество:

  • 1. решено原型链继承, проблема экземпляров подкласса, разделяющих атрибуты ссылки на родительский класс
  • 2. При создании экземпляра подкласса можно передать параметры родительскому классу
  • 3. Может быть достигнуто множественное наследование (вызов нескольких объектов родительского класса)

недостаток:

  • 1. Экземпляр не является экземпляром родительского класса, а экземпляром подкласса знаний.
  • 2. Он может наследовать свойства и методы экземпляра родительского класса, но не может наследовать свойства/методы прототипа.
  • 3. Повторное использование функций невозможно, каждый подкласс имеет копию функции экземпляра родительского класса, что влияет на производительность.

3. Наследование экземпляра

Ядро: добавьте новые функции в экземпляры родительского класса и верните их как экземпляры дочернего класса.

function Cat(name){
  var instance = new Animal();
  instance.name = name || 'Tom';
  return instance;
}

var cat = new Cat();
console.log(cat.name) // Tom
cat.sleep() // Tom正在睡觉!
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); // false

преимущество:

  • 1. Нет ограничений на вызываемый метод, будь тоnew 子类()все еще子类(), возвращаемый объект имеет тот же эффект

недостаток:

  • 1. Экземпляр — это экземпляр родительского класса, а не экземпляр дочернего класса.
  • 2. Множественное наследование не поддерживается

4. Копировать наследование

Ядро: просто скопируйте один за другим

function Cat(name){
  var animal = new Animal();
  for(var p in animal){
    Cat.prototype[p] = animal[p];
  }
  this.name = name || 'Tom';
}

var cat = new Cat();
console.log(cat.name); // Tom
cat.sleep() // Tom正在睡觉!
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

преимущество:

  • 1. Поддержка множественного наследования

недостаток:

  • 1. Низкая эффективность и большое использование памяти (потому что нужно копировать атрибуты родительского класса)
  • 2. Невозможно получить неперечислимые методы родительского класса (неперечислимые методы недоступны с помощью for in)

5, наследование композиции

Ядро: создание с помощью родительского класса, наследование свойств родительского класса и сохранение преимуществ передачи параметров, а затем реализация повторного использования функций с использованием экземпляра родительского класса в качестве прототипа дочернего класса.

function Cat(name){
  Animal.call(this);
  this.name = name || 'Tom';
}
Cat.prototype = new Animal();

Cat.prototype.constructor = Cat;

var cat = new Cat();
console.log(cat.name); // Tom
cat.sleep() // Tom正在睡觉!
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); // true

преимущество:

  • 1. компенсировать构造继承Дефект может наследовать свойства/методы экземпляра, а также свойства/методы прототипа.
  • 2. Это экземпляр подкласса и экземпляр родительского класса.
  • 3. Нет проблемы с совместным использованием ссылочных атрибутов
  • 4. Может передавать параметры
  • 5. Функции можно использовать повторно

недостаток:

  • 1. Конструктор родительского класса вызывается дважды, и генерируются два экземпляра (экземпляр подкласса экранирует экземпляр в прототипе подкласса)

6. Наследование паразитарного состава

Ядро: отключите атрибуты экземпляра родительского класса с помощью паразитных методов, чтобы при двойном вызове конструктора родительского класса методы/атрибуты экземпляра не инициализировались дважды, избегая继承组合Недостатки

function Cat(name) {
  Animal.call(this);
  this.name = name || 'Tom';
}
// 创建一个没有实例方法的类
var Super = function () { };
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();

// Test Code
var cat = new Cat();
console.log(cat.name); // Tom
cat.sleep() // Tom正在睡觉!
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true

преимущество:

  • 1. Это идеально

недостаток:

  • 1. Реализация сложна

38. Какие есть способы создания объекта?

создание нового объекта

const obj = new Object()
obj.name = 'Sunshine_Lin'

буквальное создание

const obj = { name: 'Sunshin_Lin' }

Создание заводского шаблона

function createObj(name) {
  const obj = new Object()
  obj.name = name
  return obj
}
const obj = createObj('Sunshine_Lin')

создание конструктора

function Person(name) {
  this.name = name
}
const person = new Person('Sunshine_Lin')

39. На какие четыре ситуации указывает это?

  • 1. Новый оператор создает экземпляр
function Person(name) {
  this.name = name
  console.log(this)
}
// this指向当前person实例对象
const person = new Person('Sunshine_Lin')
  • 2. Укажите на окно
function fn() {
  console.log(this)
}
fn() // 浏览器window,node里global
  • 3. Метод вызова объекта
const target = {
  fn: function () { console.log(this) }
}
target.fn() // target

// 这种就是改变了this了
const fn = target.fn
fn() // 浏览器window,node里global
  • 4. позвонить, подать заявку, привязать изменить это
const obj1 = {
  name: '林三心',
  sayName: function() {
    console.log(this.name)
  }
}
const obj2 = {
  name: 'Sunshin_Lin'
}
// 改变sayName的this指向obj2
obj1.sayName.call(obj2) // Sunshin_Lin
// 改变sayName的this指向obj2
obj1.sayName.apply(obj2) // Sunshin_Lin
// 改变sayName的this指向obj2
const fn = obj1.sayName.bind(obj2)
fn() // Sunshin_Lin

40. Каковы общие методы массивов?

метод эффект Влиять ли на исходный массив
push Добавить элемент после массива, вернуть длину массива
pop Удалить последний элемент массива и вернуть удаленный элемент
shift Удалить первый элемент массива и вернуть удаленный элемент
unshift Добавить элемент в начало массива и вернуть новую длину массива
reserve Обратный массив, возвращающий измененный массив
sort Сортировать массив, возвращая измененный массив
splice Перехватить массив и вернуть перехваченный интервал
join Объединяет все элементы массива в строку и возвращает строку
concat arr1.concat(arr2, arr3) объединяет массивы
join arr.join(x) объединяет элементы массива arr в строку и возвращает строку
map Работает с каждым элементом массива и возвращает новый массив
forEach перебирает массив, нет возвращаемого значения
filter Оцените все элементы в массиве и верните новый массив, соответствующий правилам.
every Возвращает true, если каждый элемент массива соответствует правилам
some Возвращает true, если в массиве есть элемент, соответствующий правилу
reduce Получить предыдущий результат и следующий элемент массива
flat Выравнивание массива
slice Перехватить массив и вернуть перехваченный интервал

41. Каковы общие методы математики?

метод эффект
Math.max(...arr) принять максимальное значение в обр
Math.min(...arr) взять наименьшее значение в обр
Math.ceil(десятичный) округлять десятичные дроби
Math.floor(десятичный) Десятичные числа округляются вниз
Math.round(десятичный) Десятичное округление
Math.sqrt(num) квадратное число
Math.pow(num, m) Возвести число в степень m
Math.random() * num Возьмите случайное число из 0-num

42. Какие факторы приводят к утечкам памяти? Как решить?

Пожалуйста, смотрите мою статьюГде великий бог? Просто используйте дату Танабата других людей, чтобы разобраться с «JS, чтобы избежать утечек памяти».

43. Расскажите о механизме сборки мусора в JavaScript.

Смотрите мою статью:Дайте вам 13 изображений, которые помогут вам победить «механизм сбора мусора V8» за 20 минут.

44. Какие бывают типы всплывающих окон в JS?

В JS доступно три типа всплывающих окон, а именно:

  • Alert

  • Confirm

  • Prompt

45. Как преобразовать дату JS в стандарт ISO

toISOString()метод используется для преобразования даты js в стандарт ISO. Он преобразует объект js Date в строку, используя стандарт ISO. как:

var date = new Date();
var n = date.toISOString();
console.log(n);
// YYYY-MM-DDTHH:mm:ss.sssZ

46. ​​Как кодировать и декодировать URL-адреса в JS

encodeURI()Функция используется для кодирования URL-адресов в JS. Он принимает строку URL-адреса в качестве параметра и возвращает закодированную строку.

Уведомление: encodeURI() не будет кодировать такие символы: / ? : @ & = + $ #, если вам нужно кодировать эти символы, используйте encodeURIComponent(). использование:

var uri = "my profile.php?name=sammer&occupation=pāntiNG";
var encoded_uri = encodeURI(uri);

decodeURI()Функция используется для декодирования URL-адресов в js. Он принимает закодированную строку URL-адреса в качестве параметра и возвращает декодированную строку, использование:

var uri = "my profile.php?name=sammer&occupation=pāntiNG";
var encoded_uri = encodeURI(uri);
decodeURI(encoded_uri);

47. Что такое спецификация? Какие API существуют?

Спецификацияbrowser object model,浏览器对象模型

api эффект представляет метод или свойство
window.history Управление записями браузера history.back()
history.go(-1)
window.innerHeight Получить высоту окна браузера
window.innerWidth Получить ширину окна браузера
window.location Кнопка обновления действия и адресная строка location.host: получить доменное имя и порт
location.hostname: получить имя хоста
location.port: получить номер порта
location.pathname: получить путь URL-адреса
location.search: получить часть, начинающуюся с ?
location.href: получить полный URL
location.hash: получить часть, начинающуюся с #
location.origin: Получить текущее доменное имя
location.navigator: Получить текущую информацию о браузере

48. Взаимосвязь между BOM и DOM

BOMПолное название — Browser Object Model, то есть объектная модель браузера, которая в основном имеет дело с окнами и фреймами браузера.

Полное название модели DOM — объектная модель документа, которая представляет собой объектную модель документа.Это интерфейс прикладного программирования (API) HTML и XML.Он соответствует стандарту W3C и является стандартом, которого придерживаются все браузеры.

Доступ к JS осуществляетсяBOM(Объектная модель браузера) объект для доступа, управления, изменения клиента (браузера), посколькуBOMОкно содержит документ. Свойства и методы объекта окна можно использовать и воспринимать напрямую. Следовательно, свойство документа объекта окна можно использовать напрямую, а содержимое и структуру документа XHTML можно получить, получить и изменить. через свойство документа. Поскольку объект документа является корневым узлом DOM.

Можно сказать, что спецификация содержит DOM (объект), а браузер предоставляет доступ к объекту спецификации, от объекта спецификации к объекту DOM, так что js может управлять браузером и документами, читаемыми браузером.

49. В чем разница между функциями substr() и substring() в JS

Функция substr() имеет форму substr(startIndex,length). Он возвращает подстроку из startIndex и возвращает количество символов «длина».

var s = "hello";
( s.substr(1,4) == "ello" ) // true

Функция substring() имеет вид substring(startIndex,endIndex). Он возвращает подстроку от startIndex до endIndex - 1.

var s = "hello";
( s.substring(1,4) == "ell" ) // true

50. Объясните "использовать строго"?

«use strict» — это директива js, представленная в Es5. Целью использования директивы use strict является принудительное выполнение кода в строгом режиме. В строгом режиме мы не можем использовать переменные без их объявления. Более ранние версии js игнорировали «использовать строго».

Эпилог

Если вы считаете, что эта статья вам немного поможет, поставьте лайк и поддержите Линь Сансиня, ха-ха.

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

Если у вас есть другие цели, не добавляйте меня, я не хочу с вами дружить, я просто хочу освоить фронтенд, я не хочу заниматься некоторыми вещами! ! !