xx? xx:xx有个令人心碎的问题

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??这个更是逆天??
阅读 3.8k
8 个回答

运算符+和?的顺序问题,改成这样
'Value id '+(val === 'value'?'Something':'Nothing')
使用三目表达式的时候尽量保持一个整体

加优先级高于多目

因为'Value id '+(val === 'value')

你就没理解三元运算符。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'));

注意,我使用了加粗的括号,这其实就是一个运算符先后顺序的问题,你如果不加这对括号,它就会先和前面的字符串做相加运算符,然后再判断

不清楚运算符优先级就多用括号

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题