JavaScript,无三元运算符的字符串连接

时间:2018-08-01 18:27:02

标签: javascript string performance ecmascript-6 ecmascript-5

通常我用这个:

myVar = "myString is" + 1 === 1 ? " really true" : " false, I think";

也许我只需要真正的部分,比如说:

myVar = "myString is" + 1 === 1 ? " really true" : "";

我不喜欢这部分:: "",因为它没用。

是否可以使用类似下面的内容?

myVar = "myString is" + 1 === 1 && " really true";

它可以工作,但如果为假,则存在问题,因为它写"false"

6 个答案:

答案 0 :(得分:1)

您总是可以使用旧的if语句

var myVar = 'myString is';
if (1===1){myVar+=' really true';}

我认为这比单行布尔测试更具可读性

答案 1 :(得分:0)

1 === 1 && " really true"括在括号()内并像下面一样添加|| ''(也包裹在括号中),或者可以使用模板文字来节省键入{{1}的时间} s

+

尽管看起来比拥有多余的let myString = "myString is" + ((1 === 1 && " really true") || ''); let myFalseString = "myString is" + ((1 === 0 && " really true") || ''); let onlyFalse = "myString is" + 1 === 1 && " really true"; let myTL = `myString is ${(1 === 1 && "really true") || ''}`; console.log('My String:', myString); console.log('False String:', myFalseString); console.log('Only false:', onlyFalse); console.log('My Template Literal:', myTL);更糟,所以我仍然建议这样做:

: ""

答案 2 :(得分:0)

要务实,最好的模式和最佳书写方式是依靠助手:

myVar =“我的字符串是” + myHelper(... myParams);

然后在帮助器中,我们将有一个专门为此目的而制作的并且确实可读的保护套/开关。

答案 3 :(得分:0)

您可以只使用||

myVar = (1 === 1 && "myString is really true") || "";

答案 4 :(得分:0)

分析三元运算符,我们得出的结论是这样的:

// Example: 1 === 1 ? ' is really true' : ''
if (1 === 1) {
    return ' is really true';
} else {
    return '';
}

因此解决方案将是简单地从三元运算符中删除“ else”,从而生成“二进制”。使用单独的IF:

if (1 === 1) {
    myVar += 'is really true';
}

内联使用逻辑运算符的最佳解决方案是三元运算符本身。将“ false”部分作为空字符串“”是没有问题的。但是,如果您对此感到非常恼火,则可以创建一个函数并使用如下模板文字:

function myFunction(evaluation) {
    if (evaluation) {
        return ' really true';
    }
    return '';
}

let myVar = `My String is ${myFunction(1 === 1)}`;

答案 5 :(得分:0)

获得类似结果的另一种方法可能是使用Array,并在值不为false时合并这些值。并不是说它比添加: ''短,但是据我所知,没有办法摆脱: ''

console.log( ["my string is", 1 === 1 && "really true"].filter(Boolean).join(" ") );
console.log( ["my string is", 1 === 2 && "really true"].filter(Boolean).join(" ") );

我会坚持使用: ''或编写一个看起来像这样的辅助函数。

function concat(){
  let str = "";
  for(let s of arguments){
    str += s ? s : '';
  }
  return str;
}

console.log( concat("my string is", 1 === 1 && "really true") );
console.log( concat("my string is", 1 === 2 && "really true") );