UndefinedのTEXT変数を比較すると、いつでもtrueになってif文が通ってしまう

変数は、宣言せずに代入もしない状態では「Undefined」になっている。この変数を文字列として評価して「空白なら何もしない」などのロジックを実装する場合の注意事項。

比較する変数が初出の場合、つまりUndefinedの場合、「#””」いつでもtrueになってif文が通ってしまう。

たとえば次のコードは、未定義の$nameTextを代入なしにいきなりif文で比較している。「名前に空白を渡したら何も実行しない」メソッドのはずが$bodyを返してくる。

//zz_test_Undefined
//20250924 wat
//未定義変数

C_TEXT($1; $name)
$name:=$1
C_TEXT($2; $body)
$body:=$2
C_TEXT($0; $retText)
$retText:=""

If ($nameText#"")
	//なにか実行
	$retText:=$name+" "+$body
	
End if 

$0:=$retText

引数の名前を変更した際にif文の変数名を変更し忘れたため発生したバグ。このif文は常に成立してしまう。条件が通ってしまうので気付きにくい。呼びだし元は次のように、第1引数を空白にして実行すると「cde」が返ってくる。

//zz_test_Undefined2
//20250924 wat
//未定義変数

$name:=""
$body:="cde"

$retText:=zz_test_Undefined($name; $body)

ALERT($retText)

zz_test_Undefinedの$nameTextを$nameに修正してから、zz_test_Undefined2を実行すると、名前が空白なら$retTextは正しく空白になる。