繁体   English   中英

在javascript中使用三元运算符连接字符串

[英]Concatenate string with ternary operator in javascript

它很烦人

以下代码:

var arrays = [1,2,3];
alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');

警告为multiple ,其中字符串与三元结果连接

但是这段代码:

var arrays = [1,2,3];
alert('Array has ' + ((arrays.length > 0) ? 'multiple':'single') + ' value');

警告,因为Array has multiple value ,其中string与三元结果连接在一起。

我的问题是:

  1. 为什么第一个代码不与字符串连接。
  2. 第一个代码中是否存在语法错误,如果是这样,为什么它不会引发错误。

你的第一个例子是这样解析的

alert(('Array has ' + (arrays.length > 0)) ? 'multiple':('single' + ' value'));

给定运算符优先级 +远远高于?:

两个片段在语法上都是正确的,但由于运算符优先级而不同。 三元运算符的优先级低于+

在第一个片段中:

var arrays = [1,2,3];
alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');

Javascript评估第一部分'Array has ' + (arrays.length > 0) ,它给出字符串'Array has true' 出于条件目的,非空字符串与true相同(通常称为truthy值)。 因为三元运算符中的第一个操作数是真实的,所以整个表达式的值将是表达式'multiple'的值,即在?之间? :

在第二个代码段中添加参数时,只需将三元运算符(arrays.length > 0)作为其条件。 这就是代码按预期工作的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM