線を消すつもりで ctx.lineWidth = 0 と書いても、以前の線幅が残る。Canvas は 0、負の値、Infinity、NaN の代入を無視する。
たとえば ctx.lineWidth = 6; ctx.lineWidth = 0; の後では ctx.lineWidth は 6 のままになる。その状態で strokeRect() などを呼ぶと、線を消したつもりでも枠が描かれる。
枠を表示しない設定なら、アプリ側で枠を描く処理を呼ばないようにする。幅を入力する UI では、描画前に有限の正の数か確認し、不正な値を以前の描画設定へそのまま渡さない。0 を「枠なし」として受け付けるかどうかは、アプリ側の仕様として決める。
lineWidth の初期値は 1.0 だが、不正な値を入れるたびに初期値へ戻るわけではない。代入の前後で値を読むと、どの線幅が残ったか確認できる。
私は画像プロジェクト Morphio に関わっている。このメモは Canvas API の値の扱いを説明しており、製品の実装についての説明ではない。参照:MDN lineWidth。