[1] [CITE[IRC logs: freenode / #whatwg / 20140523]]
( ([TIME[2014-05-25 18:42:17 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140523>

[2] 
[CODE[toggle]] の第2引数は [CODE[boolean]] 型なのですが、
[CODE[false]] のつもりで [CODE[undefined]] を渡すと引数なし → 真、
と解釈されてしまう罠があります。

例えば、

[PRE(JS code bad example)[
var opts = {};
if (...) {
  opts.enabled = true;
}
element.classList.toggle ('somewhat', opts.enabled);
]PRE]

... は条件に合わせて [CODE[[[class][class=""]]="somewhat"]]
を指定するかどうかを変えているつもりが、常に[[真]]になってしまいます。

[PRE(JS code good example)[
var opts = {enabled: false};
if (...) {
  opts.enabled = true;
}
element.classList.toggle ('somewhat', opts.enabled);
]PRE]

... や、

[PRE(JS code good example)[
var opts = {};
if (...) {
  opts.enabled = true;
}
element.classList.toggle ('somewhat', !!opts.enabled);
]PRE]


... のように常に値が渡るようにする必要があります。

[3] 
これ案外はまりがちなので注意。



[4] 
add, append, remove, delete みたいなの覚えるの難しいから [CODE[toggle]] は1つ覚えておけばどっちだったか気にしなくていいというのが便利。

