Почему вам следует избегать удаления в JS

JavaScript

в JavaScriptdelete оператор用于删除对象的某个属性。 Например

const person = {
    name: 'sudada',
    gender: 'female'
}

delete person.name

console.log(person.name) // undefined

В отличие от наиболее интуитивной семантики, используйтеdelete операторОн не освобождает память напрямую, но это означает, что он сделает память в движке V8 (Javascript)hidden classНедействительный объект в общийslow object, что значительно снижает скорость выполнения.

hidden class: Поскольку JavaScript является динамическим языком программирования, свойства могут добавляться и удаляться динамически, что означает, что свойства объекта могут изменяться.Большинство движков JavaScript (V8) вводят скрытые классы для отслеживания типов объектов и переменных, о которых идет речь. Во время выполнения V8 создает скрытые классы, которые присоединяются к каждому объекту, чтобы отслеживать его форму/макет. Это оптимизирует время доступа к атрибуту.

Ссылаться на:

Это не стыдно.com/posts/under…

stackoverflow.com/questions/4…

тогда, если вы не используетеdelete, как мы удаляем свойство объекта?

Наиболее эффективным способом должно быть установка нежелательного свойства наundefined,Например

const person = {
    name: 'sudada',
    gender: 'female'
}

person.name = undefined // 删除 name 属性

Или вы также можете рассмотреть возможность использования оператора распространения для объектов, например.

const person = {
    name: 'sudada',
    gender: 'female'
}
const omit = (prop, { [prop]: _, ...rest }) => rest;
const newObj = omit('name', person); // 删除 name 属性

оSpread Operator for objectsдля справки:juejin.cn/post/1

Такdelete,Установить какundefined,omitКак выбрать из трех способов?

На графике показана эффективность (количество выполнений в секунду) трех методов при разных ядрах Javascript. Очевидно, что можно сделать вывод о том, чтоundefined > delete > omit.

Адрес экземпляра:JSP и F.com/removing-VA…

но настроен наundefined, результат

{
    name: undefined,
    gender: 'female'
}

Иногда требуются дополнительные операции, например

JSON.parse(JSON.stringify(person))
// 或者
Object.keys(person).reduce((pre, cur) => {
    const value = person[cur]
    return value === undefined ? pre : {...pre, [cur]: value}
}, {})

Таким образом, КПД будет сильно снижен, поэтому его можно будет учитывать в практическом деле.Mapзаменитьobject,Например

let map = new Map([['a', 1]])
let obj = { a: 1 };
// 执行
delete obj.a;
map.delete('a');

Из рисунка видно, чтоmap.deleteлучше чемdelete.