javascript - xx? xx:xx有个令人心碎的问题
阿神
阿神 2017-04-10 17:10:36
[JavaScript讨论组]
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??这个更是逆天??
阿神
阿神

闭关修行中......

全部回复(8)
PHP中文网

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

ringa_lee

加优先级高于多目

PHPz

因为'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']);
要不然你这种写法因为运算符优先级的问题,是得不到你要的答案的。

怪我咯

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

伊谢尔伦

正确的写法:

var val = 'value';
console.info('Value id '+((val === 'value')?'Something':'Nothing'));

var val = 'value';
console.info('Value id '+((val === 'value123')?'Something':'Nothing'));

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

天蓬老师

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号