Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
предисловие
Всем привет, я Линь Сансинь,Основа является предпосылкой передовых, сегодня я поделюсь с вами 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
будут судить какobject
type, а двоичный код внизу 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 игнорировали «использовать строго».
Эпилог
Если вы считаете, что эта статья вам немного поможет, поставьте лайк и поддержите Линь Сансиня, ха-ха.
Если вы хотите изучать интерфейс или рыбачить вместе, вы можете добавить меня, присоединиться к моей группе по изучению рыбы, нажмите здесь. ---> коснуться точки кипения рыбы
Если у вас есть другие цели, не добавляйте меня, я не хочу с вами дружить, я просто хочу освоить фронтенд, я не хочу заниматься некоторыми вещами! ! !