Javascript Typescript/Angular:相当于布尔类型的加号运算符
在typescript中,我们可以使用以下命令将字符串转换为数字:Javascript Typescript/Angular:相当于布尔类型的加号运算符,javascript,angular,typescript,Javascript,Angular,Typescript,在typescript中,我们可以使用以下命令将字符串转换为数字: let asText: string = "123"; let asNumerals: number = +asText; 如何对布尔类型实现同样的效果: let asText: string = "true"; console.log(+asText); // NaN console.log(typeof asText); // string let b: boolean = +asText; // does not com
let asText: string = "123";
let asNumerals: number = +asText;
如何对布尔类型实现同样的效果:
let asText: string = "true";
console.log(+asText); // NaN
console.log(typeof asText); // string
let b: boolean = +asText; // does not compile
纯JS方法产生正确的结果:
let b: boolean = asText == "true"; // Works as expected but not good enough
但这种解决方案还不够好,例如:
<component input="true"></component>
@Component()
export class Component {
@Input()
private input: boolean;
ngOnInit() {
console.log(typeof input); // string
}
}
@组件()
导出类组件{
@输入()
私有输入:布尔;
恩戈尼尼特(){
console.log(输入类型);//字符串
}
}
组件中的
应使用[]
表示,这将解决您的问题
<component [input]="true"></component>
+
运算符对数字执行类型转换。对于布尔值,和术语用于描述强制值。类型转换可以使用内置的或布尔值执行代码>快捷方式;'false'
和'true'
字符串都是真实的:
true === Boolean('true');
true === !!'false';
由于布尔值可以是true
或false
,因此解析字符串值没有意义。考虑到'true'
将被转换为true
,'false'
将被转换为false
,我们不清楚'foo'
字符串将被转换为什么-布尔型没有对应的NaN
,因为它们是布尔型的
正如另一个答案所提到的,特定的问题是特定于角度分量输入的
input=“true”
等于input=“{{true}}”
,也就是说,输入值将是一个字符串
而[input]=“true”
为,并且输入值将与传递给输入的类型相同。布尔值将保持为布尔值,不需要进行转换。让b:Boolean=asText==“true”代码>-为什么它不够好?如我的组件中所示,我首先需要测试布尔值是布尔值还是字符串,然后将其转换为布尔值。您的角度模板代码有缺陷。如果要将实际布尔值作为输入传递,它应该是[input]=“true”
。否则,您将传递一个字符串。只要修改模板代码,我不认为buggy这个词。这就是在数字上使用+运算符的原因。对布尔人没有等价物吗?这是一辆马车。如果输入类型为boolean,则不应传递字符串。当然,您也可以尝试接受字符串“true”,但它在哪里停止?为什么不接受“真”、“是”或“开”?简单明了:如果输入是布尔值,那么你接受布尔值。如果调用方出错并传递字符串,则是调用方的问题。