连接”?: ' JavaScript中的条件字符串
Concatenate `?:` Conditional Strings in JavaScript
我在JavaScript中设置了一个断点,并在Chrome浏览器控制台窗口中输入了以下表达式:
类型:
(((i % 12) == 0) ? '12' : (i % 12))
结果:
9
类型:
' ' + (i < 12) ? 'AM' : 'PM'
结果:"AM"
类型:
(((i % 12) == 0) ? '12' : (i % 12)) + ' ' + (i < 12) ? 'AM' : 'PM'
结果:"AM"
我的期望是,最后的结果将是"9AM",这是我想要的。这是我输入9 + "AM"
得到的结果。为什么它只给我一个"AM"?
是我犯了一个愚蠢的错误在这里的某个地方,还是这里有一些东西超出了我对JavaScript的内部工作的有限理解?i
只是一个for
循环变量
将第二个三进制用圆括号括起来就行了:
(((i % 12) == 0) ? '12' : (i % 12)) + ((i < 12) ? 'AM' : 'PM')
问题是您认为要连接的部分实际上是后一个三元条件的一部分。具体来说,取第一个三元数的后半部分,表达式等价于
(i % 12) + ' ' + (i < 12) ? 'AM' : 'PM'`
条件部分,(i % 12) + ' ' + (i < 12)
求值为"9 true",为真值。因为它是真实的,返回的结果是"AM";"9"作为条件的一部分进行计算,而不是像您期望的那样连接在一起。
((i < 12) ? 'AM' : 'PM')
更新后的代码变成:
(i % 12 == 0 ? '12' : i % 12) + ' ' + (i < 12 ? 'AM' : 'PM')
(((i % 12) == 0) ? '12' : (i % 12)) + ' ' + (i < 12) ? 'AM' : 'PM'
因为在?被强制为布尔值。
实际上在前面的是字符串'9 true'
,它是9
从第一个三字符与空格连接,然后,因为(i<12)是真,但它是在字符串上下文中(i<12)被强制为'真'。
当强制为布尔值时,此字符串为真值,因为它是非空的。
也可以:D
var a = (((i % 12) == 0) ? '12' : (i % 12));
var b = (i < 12) ? 'AM' : 'PM';
var output = a + b;
试试这个。在决定AM或PM的地方加上括号
var a = (((i % 12) == 0) ? '12' : (i % 12)) + ' ' + ((i < 12) ? 'AM' : 'PM');
是可以工作的jsfilehttp://jsfiddle.net/fLXr9/
相关文章:
- 应该在什么时候使用Javascript条件运算符
- 不使用关系运算符的JavaScript条件表达式
- 我需要一些javascript条件,比如媒体查询
- Javascript条件-不隐藏ID
- IE11是否删除了javascript条件编译
- JavaScript条件(如果并行)
- 在HTML中搜索字符串并返回True的Javascript条件
- javascript条件未到达else
- 推送前的JavaScript条件
- JavaScript 条件总是失败
- 如何处理 JavaScript 条件语句中的可为空的对象
- Javascript 条件返回语句(Shorthand if-else 语句)
- For 循环中的动态 Javascript 条件
- 如何理解“if ( obj.length === +obj.length )” Javascript 条件语句
- 这个Javascript条件检查是什么
- 获取数组中满足 Javascript 条件的第一个元素的高阶方法
- 如何使用JavaScript /条件注释测试浏览器是否符合CSS3
- Javascript 条件查找/替换
- 从 ASP.NET Web 窗体中的服务器端属性创建 JavaScript 条件
- 仅将特定元素添加到 html 正文中,具体取决于 javascript 条件