diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js
index 28984e3041..5856e5e65e 100644
--- a/packages/svelte/src/internal/client/dom/elements/attributes.js
+++ b/packages/svelte/src/internal/client/dom/elements/attributes.js
@@ -159,16 +159,7 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
for (var key in prev) {
if (!(key in next)) {
- if (is_option_element && key === 'value') {
- // Because of the "set falsy option values to the empty string" logic below, which can't
- // differentiate between a missing value and an explicitly set value of null or undefined,
- // we need to remove the attribute here and delete the key from the object.
- element.removeAttribute(key);
- delete current[key];
- delete next[key];
- } else {
- next[key] = null;
- }
+ next[key] = null;
}
}
@@ -196,6 +187,12 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
// the value is set to the text content of the option element, and setting the value
// to null or undefined means the value is set to the string "null" or "undefined".
// To align with how we handle this case in non-spread-scenarios, this logic is needed.
+ // There's a super-edge-case bug here that is left in in favor of smaller code size:
+ // Because of the "set missing props to null" logic above, we can't differentiate
+ // between a missing value and an explicitly set value of null or undefined. That means
+ // that once set, the value attribute of an