Avoid extra spread / object copy and use Object.entries (#163941)

This lets us avoid copying `attrs` and also skips calling `Object.keys` if `attrs` is undefined

`Object.entries` is also slightly faster in this case
This commit is contained in:
Matt Bierner
2022-10-18 08:46:30 -07:00
committed by GitHub
parent c625ff80d3
commit e6dfd27b3b

View File

@@ -963,8 +963,6 @@ function _$<T extends Element>(namespace: Namespace, description: string, attrs?
throw new Error('Bad use of emmet');
}
attrs = { ...(attrs || {}) };
const tagName = match[1] || 'div';
let result: T;
@@ -981,24 +979,24 @@ function _$<T extends Element>(namespace: Namespace, description: string, attrs?
result.className = match[4].replace(/\./g, ' ').trim();
}
Object.keys(attrs).forEach(name => {
const value = attrs![name];
if (typeof value === 'undefined') {
return;
}
if (/^on\w+$/.test(name)) {
(<any>result)[name] = value;
} else if (name === 'selected') {
if (value) {
result.setAttribute(name, 'true');
if (attrs) {
Object.entries(attrs).forEach(([name, value]) => {
if (typeof value === 'undefined') {
return;
}
} else {
result.setAttribute(name, value);
}
});
if (/^on\w+$/.test(name)) {
(<any>result)[name] = value;
} else if (name === 'selected') {
if (value) {
result.setAttribute(name, 'true');
}
} else {
result.setAttribute(name, value);
}
});
}
result.append(...children);