字符串连接使用javascript'简写为pural或单数术语

时间:2016-12-11 15:54:04

标签: javascript angularjs

$scope.msg = 'Ok, you ate ' + num + ' hotdog' 
      + (num.length > 1) ? 's' : '' + ', got it!';

为什么以上$ scope.msg仅返回' s' ?对于pural和hotdog来说,我希望热狗可以用速记来表示。嗯,不能抓住这个错误。

2 个答案:

答案 0 :(得分:2)

您需要更多括号。

您的代码被解析为('Ok, you ate ' + num + ' hotdog' + (num.length > 1))'s'('' + ', got it!')

您需要将整个条件表达式包装在括号中。

答案 1 :(得分:1)

您可以将括号分组略有不同,仅针对三元语句,并在没有某些属性的情况下取num值。

$scope.msg = 'Ok, you ate ' + num + ' hotdog' + (num > 1 ? 's' : '') + ', got it!';



var num = 1;
console.log('Ok, you ate ' + num + ' hotdog' + (num > 1 ? 's' : '') + ', got it!');
num = 3;
console.log('Ok, you ate ' + num + ' hotdog' + (num > 1 ? 's' : '') + ', got it!');




如果你有多个单词用于复数,你可以使用一个对象和一个函数来方便访问,比如



function getPlural(number, word) {
    return number === 1 && word.one || word.other;
}

var hotdog = { one: 'hotdog', other: 'hotdogs' },
    num = 1;

console.log('Ok, you ate ' + num + ' ' + getPlural(num, hotdog) + ', got it!');
num = 5;
console.log('Ok, you ate ' + num + ' ' + getPlural(num, hotdog) + ', got it!');