在ES6中是否认为0为真?还是所有字符串都被认为是正确的?
这返回true:
var value = "0";
var isTrue = value ? true : false; // true
我认为===是为了严格的平等。
如果已更改,是否可以通过旧方法来实现兼容性?
更新:
谢谢。我收到的值将始终是一个字符串,因此我将检查“ 0”和“ false”:
var booleanValue = value && value!=="0" && value!=="false" ? true : false;
答案 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);
(!!
使得0
和NaN
转换为false
,而非0
或NaN
的数字转换到true
。)不过,这取决于您收到的内容,使用您期望的值进行切换可能会更好,等等。
¹“虚假”和“真实”:
“虚假”-用作布尔值时(例如在您的问题中的条件运算符中),强制为false
。伪造的值是0
,NaN
,null
,undefined
,""
,当然还有false
。
“真”-用作布尔值时,强制为true
。所有非虚假的值都是真实的,包括"0"
和"false"
。
答案 2 :(得分:3)
这是javascript中所有虚假值的列表:
只有字符串''是一个伪造的值,表示它是一个空字符串。 “ 0”是具有内容的字符串,因此它不是虚假值,但0是1。
答案 3 :(得分:1)
您正在检查包含0而不是实际string
0的number
。
"0" // string
0 // number
如果string
等于false
,则视为''
,所有其他字符串均视为true
如果number
是false
或0
,则将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-使用赋值而不是比较的经典错误。