$scope.msg = 'Ok, you ate ' + num + ' hotdog'
+ (num.length > 1) ? 's' : '' + ', got it!';
为什么以上$ scope.msg仅返回' s' ?对于pural和hotdog来说,我希望热狗可以用速记来表示。嗯,不能抓住这个错误。
答案 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!');