パフォーマンスについて心配する必要はありません。読み込み可能なコード、意味のある初期値、バグのないコードについては心配する必要があります。
多くの場合、開発者の生活を楽にするためにデフォルト値が使用されています。たとえば、次のように空の文字列で初期化
this.userInput = ko.observable("");
this.upperCaseUserInput = ko.computed(function() {
return this.userInput().toUpperCase();
}, this);
は、私たちは私たちの計算でnull
/undefined
チェックをスキップすることができます。 value
バインディングを使用してinput
にバインドすることがわかっている場合は、ほぼと入力してください。入力のプロトタイプに常にtoUpperCase
メソッドがあることを確認してください。空のオブジェクトでuserInput
を初期化すると、ここではうまくいきません。toUpperCase
という名前の関数がないとエラーが発生します。
複雑な計算式や「nullable」オブザーバブルを扱っている場合は、null
チェックを計算に入れ、可能であれば「階層化」/安全な計算を導入するのが最善の方法だと思います。例:
this.selectedPerson = ko.observable(); // Can be null, undefined or Person
// This computed is *always* a string
var fullName = ko.pureComputed(function() {
var person = this.selectedPerson();
return person
? person.firstName + " " + person.lastName
: "Unknown person";
}, this);
// So in this computed, we don't have to do any null checks
this.displayName = ko.pureComputed(function() {
return "**" + fullName() + "**";
}, this);
絶対的な型安全性が必要な場合は、TypeScriptを調べることをおすすめします。 TypeScriptノックアウトの組み合わせでは、特定のタイプの値のみを含むオブザーバブルを定義し、他の質問で直面していたエラーの種類を最小限に抑えることができます。
注:この回答があまりにも意見に基づいているかどうかわかりません...あなたがそれが気になるなら、私に教えてください。質問は、トピックオーバー/ストリームオーバーフローのために広すぎるかもしれません...
これは良い答えだと思います。そして、人の例は良いものです - 誰も選択されていなければ、それを空のオブジェクトで初期化するのは意味がありません - プロパティが存在するかどうかをチェックする必要があります。何も選択されていないことを示す「無」すなわち「ヌル」を持つ方がよい。それ以外の場合は、デフォルト値を使用すると便利です。それは実際にユースケースに依存しますが、私は「はい、あなたのオブザーバブルを初期化することをお勧めします」とは言いません。 –
私が提案した初期化は、必ずしも有用ではないとわかった。とにかくあなたの答えをありがとう、私は明日それを勉強します。 – Roland
あなたの答えは、ノックアウトで可能なことと何ができないのか、そしてヌル値を扱う方法をよりよく理解するのに役立ちました。 – Roland