var val = 'value';
console.info('Value id '+(val === 'value')?'Something':'Nothing');//something??为什么会这样?
为什么不是'Value id Something'??
var val = 'value';
console.info('Value id '+(val === 'value123')?'Something':'Nothing');//something??这个更是逆天??
var val = 'value';
console.info('Value id '+(val === 'value')?'Something':'Nothing');//something??为什么会这样?
为什么不是'Value id Something'??
var val = 'value';
console.info('Value id '+(val === 'value123')?'Something':'Nothing');//something??这个更是逆天??
你就没理解三元运算符。console.info('Value id '+(val === 'value')?'Something':'Nothing');
'Value id '+(val === 'value')这个得到的是'Value id true'这个再转成Boolean是true啊,是true肯定是something啊。同理下面那个是'Value id false'这个也是true啊。那么肯定还是something。这个三元运算符的意思是,如果前面的值为真,那么就执行?后面的语句,否则执行:后面的语句。你要把三元写在一起,+号的优先级高于三元运算符,低于小括号的优先级。如二楼说的。
你如果要得到你要的那个答案,你可以这么写:console.info('Value id ' + [(val === 'value')?'Something':'Nothing']);
要不然你这种写法因为运算符优先级的问题,是得不到你要的答案的。
正确的写法:
var val = 'value';
console.info('Value id '+((val === 'value')?'Something':'Nothing'));
var val = 'value';
console.info('Value id '+((val === 'value123')?'Something':'Nothing'));
注意,我使用了加粗的括号,这其实就是一个运算符先后顺序的问题,你如果不加这对括号,它就会先和前面的字符串做相加运算符,然后再判断
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答918 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
运算符+和?的顺序问题,改成这样
'Value id '+(val === 'value'?'Something':'Nothing')
使用三目表达式的时候尽量保持一个整体