在ES6中是否认为0为真?

时间:2019-07-18 15:35:19

标签: javascript ecmascript-6

在ES6中是否认为0为真?还是所有字符串都被认为是正确的?

这返回true:

var value = "0";
var isTrue = value ? true : false; // true

我认为===是为了严格的平等。

如果已更改,是否可以通过旧方法来实现兼容性?

更新:

谢谢。我收到的值将始终是一个字符串,因此我将检查“ 0”和“ false”:

var booleanValue = value && value!=="0" && value!=="false" ? true : false;

6 个答案:

答案 0 :(得分:6)

“ 0”是正确的,因为它只是一个字符串并且具有一个值,但是数字0则被认为是错误的

答案 1 :(得分:3)

其中所有包含字符的字符串都是真实的。¹只有空字符串""是虚假的。¹

0(数字)是虚假的。 "0"不是。

  

我认为===是为了严格的平等。

是的。您的代码中没有===支票。条件运算符(? :)不对条件操作数进行===检查。就像if一样,它会进行布尔检查。

如果您使用===,则会得到false

var isTrue = value === true ? true : false; // false

当然,在这种情况下,条件运算符毫无意义:

var isTrue = value === true; // false

  

我收到的值将始终是一个字符串,因此我将检查“ 0”和“ false”:

var booleanValue = value && value!=="0" && value!=="false" ? true : false;

这取决于您要执行的操作以及可能获得的值。例如,如果您得到的是一个包含有效数字或有效布尔值的字符串(如您的示例所示),则可以使用JSON.parse将其解析为数字或布尔值:< / p>

var isTrue = !!JSON.parse(str);

!!使得0NaN转换为false,而非0NaN的数字转换到true。)不过,这取决于您收到的内容,使用您期望的值进行切换可能会更好,等等。


¹“虚假”和“真实”:

  • “虚假”-用作布尔值时(例如在您的问题中的条件运算符中),强制为false。伪造的值是0NaNnullundefined"",当然还有false

  • “真”-用作布尔值时,强制为true。所有非虚假的值都是真实的,包括"0""false"

答案 2 :(得分:3)

这是javascript中所有虚假值的列表:

  • false
  • 0
  • ''或“”
  • 未定义
  • NaN

只有字符串''是一个伪造的值,表示它是一个空字符串。 “ 0”是具有内容的字符串,因此它不是虚假值,但0是1。

答案 3 :(得分:1)

您正在检查包含0而不是实际string 0的number

"0"  // string
0 // number

如果string等于false,则视为'',所有其他字符串均视为true

如果numberfalse0,则将NaN视为true,将所有其他数字视为===

true == 1 // true true === 1 // false 实际上意味着严格相等,这意味着对类型和值进行比较。所以:

{{1}}

答案 4 :(得分:0)

实际上,对于任何字符串,它将返回True,对于0作为整数,它将返回False,对于1作为整数,将返回True

var value0 = 0;
var value1 = 1;
var str = "23123";

var isTrue0 = value0 ? true : false;
var isTrue1 = value1 ? true : false; 
var isTrueStr = str ? true : false; 

console.log('0: ' + isTrue0);
console.log('1: ' + isTrue1);
console.log('string: ' + isTrueStr);

答案 5 :(得分:-2)

isTrue = value-使用赋值而不是比较的经典错误。