通常我用这个:
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"
!
答案 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") );