🈚
ClusterScriptでnullやundefinedまわりのナゾ挙動各種
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