diff --git a/src/modules/dataset.ts b/src/modules/dataset.ts index 12e8f01..d411c9c 100755 --- a/src/modules/dataset.ts +++ b/src/modules/dataset.ts @@ -18,7 +18,7 @@ function updateDataset(oldVnode: VNode, vnode: VNode): void { const d = elm.dataset; for (key in oldDataset) { - if (!dataset[key]) { + if (!(key in dataset)) { if (d) { if (key in d) { delete d[key]; diff --git a/src/modules/style.ts b/src/modules/style.ts index 46ef52a..9629fa9 100755 --- a/src/modules/style.ts +++ b/src/modules/style.ts @@ -42,7 +42,7 @@ function updateStyle(oldVnode: VNode, vnode: VNode): void { const oldHasDel = "delayed" in oldStyle; for (name in oldStyle) { - if (!style[name]) { + if (!(name in style)) { if (name[0] === "-" && name[1] === "-") { (elm as any).style.removeProperty(name); } else { diff --git a/test/unit/dataset.ts b/test/unit/dataset.ts index 0b59597..91bfec2 100644 --- a/test/unit/dataset.ts +++ b/test/unit/dataset.ts @@ -40,6 +40,14 @@ describe("dataset", function () { assert.strictEqual(elm.dataset.baz, "baz"); assert.strictEqual(elm.dataset.foo, undefined); }); + it("handles falsy values", function () { + const vnode1 = h("i", { dataset: { foo: "" } }); + const vnode2 = h("i", { dataset: { foo: "" } }); + elm = patch(vnode0, vnode1).elm; + assert.strictEqual(elm.dataset.foo, ""); + elm = patch(vnode1, vnode2).elm; + assert.strictEqual(elm.dataset.foo, ""); + }); it("can be memoized", function () { const cachedDataset = { foo: "foo", bar: "bar" }; const vnode1 = h("i", { dataset: cachedDataset }); diff --git a/test/unit/style.ts b/test/unit/style.ts index b61596d..a8df60a 100644 --- a/test/unit/style.ts +++ b/test/unit/style.ts @@ -55,6 +55,14 @@ describe("style", function () { patch(vnode2, vnode3); assert.strictEqual(elm.style.fontSize, "10px"); }); + it("handles falsy values", function () { + const vnode1 = h("i", { style: { flexShrink: 0 as any } }); + const vnode2 = h("i", { style: { flexShrink: 0 as any } }); + elm = patch(vnode0, vnode1).elm; + assert.strictEqual(elm.style.flexShrink, "0"); + patch(vnode1, vnode2); + assert.strictEqual(elm.style.flexShrink, "0"); + }); it("implicially removes styles from element", function () { const vnode1 = h("div", [h("i", { style: { fontSize: "14px" } })]); const vnode2 = h("div", [h("i")]);