Javascript 是康德吗?true:false`语法是否良好?

Javascript 是康德吗?true:false`语法是否良好?,javascript,c#,Javascript,C#,刚开始一份新工作时,我同事的代码中充斥着cond?true:false在其C#和Javascript代码中的表达式。我倾向于用cond替换所有这些事件。但是代码没有足够的回归测试,在重构时过于大胆,所以我很谨慎。我甚至在我们使用的Javascript库中注意到了这种模式,这让我怀疑这是否是一种好的语法。在我看来,似乎有人忘记了bool表达式已经是值了,我们不需要快速写出bool文本。我很有信心我总能从C#代码中提取出这一点,但我想知道Javascript条件运算符是否在使用强制?或者,如果有任何

刚开始一份新工作时,我同事的代码中充斥着
cond?true:false
在其C#和Javascript代码中的表达式。我倾向于用
cond
替换所有这些事件。但是代码没有足够的回归测试,在重构时过于大胆,所以我很谨慎。我甚至在我们使用的Javascript库中注意到了这种模式,这让我怀疑这是否是一种好的语法。在我看来,似乎有人忘记了
bool
表达式已经是值了,我们不需要快速写出
bool
文本。我很有信心我总能从C#代码中提取出这一点,但我想知道Javascript条件运算符是否在使用强制?或者,如果有任何其他原因可以解释为什么这种模式有时是一种好的做法?

我只能代表javascript方面发言,但您没有提供足够的信息说明如何使用
cond?true:false
。换句话说:表达式的布尔值是否设置为变量其他地方使用的变量是什么?或者表达式仅在if语句中计算

我这样问是因为javascript是一种非类型化语言

如果
cond
的每个实例都是布尔值true或false,那么请确定替换它们

如果
cond
的任何实例可能是字符串或int,这可能会改变程序的运行方式

一个简单的例子:

var cond = "helloworld"
var bool = cond?true:false
console.log(bool)
//^打印布尔将打印
true

其中:

var cond = "helloworld"
console.log(cond);
//^其中,打印cond将导致字符串
helloworld

因此,在javascript中,根据东西的使用方式,用
cond
替换这些表达式可能不是最好的解决方案

你可以做的一件事就是将
cond?true:false
更改为
!!条件
。它也在做同样的事情,但文本更少。不利的一面是,你的所作所为并不总是一目了然


哪里!是不是操作员和!!本质上返回插补值的布尔值

我只能代表javascript方面发言,但您没有提供足够的信息说明如何使用
cond?true:false
。换句话说:表达式的布尔值是否设置为变量其他地方使用的变量是什么?或者表达式仅在if语句中计算

我这样问是因为javascript是一种非类型化语言

如果
cond
的每个实例都是布尔值true或false,那么请确定替换它们

如果
cond
的任何实例可能是字符串或int,这可能会改变程序的运行方式

一个简单的例子:

var cond = "helloworld"
var bool = cond?true:false
console.log(bool)
//^打印布尔将打印
true

其中:

var cond = "helloworld"
console.log(cond);
//^其中,打印cond将导致字符串
helloworld

因此,在javascript中,根据东西的使用方式,用
cond
替换这些表达式可能不是最好的解决方案

你可以做的一件事就是将
cond?true:false
更改为
!!条件
。它也在做同样的事情,但文本更少。不利的一面是,你的所作所为并不总是一目了然


哪里!是不是操作员和!!本质上返回插补值的布尔值

我相信你已经回答了你的问题

我同意你的观点,你可以安全地从C代码中提取这个。
?:
运算符只能将一个布尔值作为其第一个操作数,编译器负责确保它。因此,即使没有足够的测试,我也会对结果充满信心。另一方面,处理
cond?false:true
会有点棘手,但不会太多

JS代码是另一个野兽。您的代码中可能有以下情况:

var cond=1;
布尔值=cond?真:假;
//远离作业或不容易想象的地方
如果(布尔===真){
log(“这是真的!”);
}否则{
log(“它是假的!”);

}
我相信你已经回答了你的问题

我同意你的观点,你可以安全地从C代码中提取这个。
?:
运算符只能将一个布尔值作为其第一个操作数,编译器负责确保它。因此,即使没有足够的测试,我也会对结果充满信心。另一方面,处理
cond?false:true
会有点棘手,但不会太多

JS代码是另一个野兽。您的代码中可能有以下情况:

var cond=1;
布尔值=cond?真:假;
//远离作业或不容易想象的地方
如果(布尔===真){
log(“这是真的!”);
}否则{
log(“它是假的!”);

}
实际上,它对c#和js都有价值 对于js,因为它不是类型安全的,这相当于新的布尔值(cond)

它还使所有非1和true值等于false,而不处理Nan和null

在C#中,如果对象是动态类型,则与js的情况相同


如果它是bool,那么您只需避免运行时错误,这在我看来是一种糟糕的做法

实际上,它对c#和js都有价值 对于js,因为它不是类型安全的,这相当于新的布尔值(cond)

它还使所有非1和true值等于false,而不处理Nan和null

在C#中,如果对象是动态类型,则与js的情况相同


如果这是一个bool,那么您只需避免运行时错误,这在我看来是一个糟糕的做法

所有的答案都说明
cond?true:false
是C语言中的冗余代码#不完全正确。有一个鲜为人知/使用的语言特性,它实际上是有意义的(尽管很可能这不是您的特殊情况)

考虑以下类型:

class StrangeWrapper<T>
{
    public T Value { get; }
    public StrangeWrapper(T value) { Value = value; }

    public static bool operator true(StrangeWrapper<T> value)
    {
        return !Equals(value.Value, default(T));
    }

    public static bool operator false(StrangeWrapper<T> value)
    {
        return Equals(value.Value, default(T));
    }
}
class-wrappe