Не думаю, что вам следует беспокоиться о производительности. Вы должны беспокоиться о читаемом коде, значимых начальных значениях и коде без ошибок.
Часто вы видите значения по умолчанию, которые используются для облегчения жизни разработчика. Например:
this.userInput = ko.observable("");
this.upperCaseUserInput = ko.computed(function() {
return this.userInput().toUpperCase();
}, this);
Инициализация с пустой строкой позволяет пропустить проверку null
/undefined
в нашей вычислен. Если мы знаем, что мы свяжемся с input
через привязку value
, мы можем почти быть уверенным, что в прототипе нашего ввода всегда будет метод toUpperCase
. Инициализация userInput
с пустым объектом не принесет нам никакой пользы здесь: отсутствие функции с именем toUpperCase
вызовет ошибку.
Если вы имеете дело со сложными вычислениями и «обнуляемыми» наблюдаемыми объектами, я думаю, что лучший способ - включить в ваши расчеты 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-knockout позволит вам определять наблюдаемые объекты, которые могут содержать только определенный тип значения, сводя к минимуму виды ошибок, с которыми вы столкнулись в другом вопросе.
Примечание: Я не уверен, что этот ответ слишком основан на мнениях ... Если вы это чувствуете, дайте мне знать. Вопрос может быть вне темы/слишком широким для stackoverflow ...
Я думаю, что это прекрасный ответ. И пример человека хороший - если его никто не выбрал, нет смысла инициализировать его пустым объектом - тогда вы возвращаетесь к необходимости проверки наличия или отсутствия свойств. Лучше иметь «ничего», то есть «нуль», не представляющий ничего выбранного. В других случаях полезно использовать значение по умолчанию. Это действительно зависит от варианта использования, но я бы не сказал «да, это хорошая идея, чтобы инициализировать все ваши наблюдаемые». –
Я узнал, что предложенная инициализация не всегда полезна или достаточна. В любом случае, спасибо за ваш ответ, я буду изучать его завтра. – Roland
Ваш ответ, несомненно, помог мне лучше понять, что возможно с помощью Knockout, а что нет, и способы борьбы с нулевыми значениями. – Roland