Vim script で文字列を比較する場合の注意

2回ぐらい Lingr に話題になったネタなんですがいつも忘れているので覚書。
Vim script で文字列を比較する場合、==# を使用する事が多いと思います。

let s:homu = "homu"

echo s:homu ==# "mado"
" => 0
echo s:homu ==# "homu"
" => 1


上記の場合だと問題はないのですが、文字列以外の場合と比較する場合に問題になります。

" 数値を設定する
let s:homu = 0

echo s:homu ==# ""
" => 1
echo s:homu ==# "homu"
" => 1


このように両方とも 1 が返ってきます。

[回避方法]

is#、isnot# を使用します。

let s:homu = "homu"

echo s:homu is# "mado"
" => 0
echo s:homu is# "homu"
" => 1

let s:mami = 0
echo s:mami is# ""
" => 0
echo s:mami is# "mami"
" => 0


これは is 演算子が型まで考慮するためです。