el[key] = value == null ? '' : value
return
}
+
if (key === 'value' && el.tagName !== 'PROGRESS') {
// store value as _value as well since
// non-string values will be stringified.
}
return
}
- if (value === '' && typeof el[key] === 'boolean') {
- // e.g. <select multiple> compiles to { multiple: '' }
- el[key] = true
- } else if (value == null && typeof el[key] === 'string') {
- // e.g. <div :id="null">
- el[key] = ''
- el.removeAttribute(key)
- } else if ((value == null || value === '') && typeof el[key] === 'number') {
- // e.g. <img :width="null">
- el[key] = 0
- el.removeAttribute(key)
- } else {
- // some properties perform value validation and throw
- try {
- el[key] = value
- } catch (e) {
- if (__DEV__) {
- warn(
- `Failed setting prop "${key}" on <${el.tagName.toLowerCase()}>: ` +
- `value ${value} is invalid.`,
- e
- )
- }
+
+ if (value === '' || value == null) {
+ const type = typeof el[key]
+ if (value === '' && type === 'boolean') {
+ // e.g. <select multiple> compiles to { multiple: '' }
+ el[key] = true
+ return
+ } else if (value == null && type === 'string') {
+ // e.g. <div :id="null">
+ el[key] = ''
+ el.removeAttribute(key)
+ return
+ } else if (type === 'number') {
+ // e.g. <img :width="null">
+ el[key] = 0
+ el.removeAttribute(key)
+ return
+ }
+ }
+
+ // some properties perform value validation and throw
+ try {
+ el[key] = value
+ } catch (e) {
+ if (__DEV__) {
+ warn(
+ `Failed setting prop "${key}" on <${el.tagName.toLowerCase()}>: ` +
+ `value ${value} is invalid.`,
+ e
+ )
}
}
}