关于js字符串拼接与三元表达式的坑

在学react的代码的入门例子的时候遇到了以下代码

1
const status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');

当时想当然的认为并不需要括号,如以下代码

1
const status = 'Next player: ' + this.state.xIsNext ? 'X' : 'O';

但显示结果会为X

但是该代码实际上在类型严格的语言如C#会报错, 因为代码在没有加括号会从左到右来执行, 这样会将'Next player: ' + this.state.xIsNext先计算, 因此得到一个string类型, 但强类型语言的string没法转换成bool类型, 因此会编译不通过.

但是js是个弱类型的语言, 因此string类型也能进行true和false判断, string不为null则为true, 反之为false, 因此'Next player: ' + this.state.xIsNext先计算, 进行真假判断, 得到结果为true, 所以界面会显示X