Webページで考えたら分かるんじゃない?
HTMLで静的コードした値を置き換えるのは簡単でしょ
これがJavaなんかで動的生成する場合は表示される値の参照先を入れ替えても意味ない
ユーザーが手入力する欄を実装するとき値がなければNullになるのはアプリが制御してる
動的にコーディングするときはこのユーザー制御かアプリ制御かの区別が必要なんです

ユーザー制御の場合、手入力の欄に値が「無い」ことを論理的に解釈できますが
コンピューターは「無いモノは無い」というのを論理的に解釈できません
例えば0にしても「0というものがある」と定義しなければ処理がスタックします
静的なHTMLでは無いモノは表示しないだけですよね

3Dゲームのキャラメイクのようにユーザーが手入力する値が無くても
Unityが参照元の値に戻しますから保存時に値が受け渡されます
しかしメモリ上に置かれた参照先の値を入れ替えて
「無いモノは無い」という理屈をアプリに解釈させようとしてもできません
なのでNullを吐いてエラーになります、このとき参照元がないので処理はスタックします
存在するアセットを置き換えることは出来ても、無いモノが無いという解釈はしてくれません

処理が半端になる原因はそれです