2015-12-14 2 views
2

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

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

Если я всегда делаю «+ = строка» Я в конечном итоге с «undefinedstring» в случае obj.prop был неопределенным

+3

'if (obj.prop && obj.prop! == ' undefined ') {' – Tushar

ответ

1

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

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

или подобным образом:

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

Поскольку' undefined' считается 'falsey', который сильно отличается от' 0'. '0' просто оказывается ложным. –

+0

правильный. я отредактирую это. когда я писал 0, я использовал терминологию «non zero» – MoLow

+1

Вы могли бы сделать это немного более универсальной функцией appendStr (obj, prop, str) ' –

0

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

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

Объект может иметь это свойство, и он все еще может быть неопределенным. OP хочет избежать этого, если/else –

+0

@JuanMendes, он не может быть неопределенным, но может быть пустым. – void

+0

@JuanMendes, где OP говорил, что хочет избежать 'if/else'? Они просто хотят, чтобы он возвращал 'string' вместо' undefinedstring' – Adjit

1

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

function (obj) { 
    obj.prop += (!!obj.prop ? obj.prop : ""); 
} 
Смежные вопросы