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