在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与三元结果连接在一起。
我的问题是:
- 为什么第一个代码不与字符串连接。
- 第一个代码中是否存在语法错误,如果是这样,为什么它不会引发错误。
你的第一个例子是这样解析的
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)
作为其条件。 这就是代码按预期工作的原因。