🈚

ClusterScriptでnullやundefinedまわりのナゾ挙動各種

2024/08/09に公開

CSEmulatorでもこの辺がんばって再現させてた(はず)なので、思い出しながらまとめました。

$.stateやsend()を通過すると、nullはundefinedになる

$.stateに入れた値や、send()を通過した値のnullはundefinedになります。
これは配列やオブジェクトの中にあっても同様です。

ItemHandle.send(xxx, undefined)は無視される

回数制限にも引っかかりません。
ちなみにItemHandle.send(xxx, null)は通ります。
ただし前述の通りundefinedで出てきます。

$.state.xxx = undefinedも無視される

$.state.xxx = 0;
$.state.xxx = undefined;
$.log($.state.xxx); //0が表示される

(CSEmulatorはV2.47で対応します)

class内で$.stateに値を入れるとTypeError: nullになる

class StateSetter{
    constructor(){}
    SetState(key, value){
        $.state[key] = value; //ここでエラー
    }
}

$.stateから値を取り出す方はできます。
$.get/setPosition()はできました。
詳細はよく分かりません&CSEmulatorでの再現もできてません。
そのうち調査して再現させたい。
(バグっぽい動きのように思ってるので24.4.11に報告はしました)

JSON.stringify()したときの表示がおかしい

下の2つによく遭遇します。

  • 配列中のundefinedがnullと表示される
  • オブジェクト中のundefinedのキーが表示されない(キーは存在している)

この辺はJavaScriptの仕様だったりします。
こちらの解説のundefinedの項目を参照してください。

先述のnullがundefinedになるやつと合わさると混乱しがちなので注意です。

情報募集中です!

見つけたり情報を頂いたりしたら追記します。
CSEmulatorで再現できてないよ!等の情報もX(Twitter)でお待ちしています!!

良きClusterScriptライフを!!!

Discussion