JavaScript возвращает строку 'undefined', когда вы объединяете undefined со строкой. Обычно это проблема, когда объединяемая строка не определена, но в моем примере obj.prop может быть неопределенным в любое время. Я хотел бы избежать этого шаблона в моем коде в подобных случаях

function (obj) {
  if (obj.prop) {
    obj.prop += 'string';
  } else {
    obj.prop = 'string';
  }
}

Если я всегда делаю '+ = string', я получаю 'undefinedstring' в случае, когда obj.prop был не определен

2
Kyle Ross 14 Дек 2015 в 17:35

3 ответа

Лучший ответ

Поскольку undefined считается ложным, вы можете реализовать это следующим образом:

function (obj) {
  obj.prop = obj.prop || '';
  obj.prop += 'string';
}

Или аналогичным образом:

function (obj) {
  obj.prop = (obj.prop || '') + 'string';
}
1
MoLow 14 Дек 2015 в 14:40

Используйте hasOwnProperty, он возвращает true, если объект имеет свойство, иначе возвращает false;

function (obj) {
  if (obj.hasOwnProperty(prop)) 
    obj.prop += 'string';
  else 
    obj.prop = 'string';
}
0
void 14 Дек 2015 в 14:37

Я обычно использую этот стиль кода,

function (obj) {  
    obj.prop += ( !!obj.prop ? obj.prop : "" );  
}
1
jake 14 Дек 2015 в 14:43