Javascript 在ES6中0被认为是正确的吗?
在ES6中0被认为是正确的吗?还是所有字符串都被认为是真的 这是真的:Javascript 在ES6中0被认为是正确的吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,在ES6中0被认为是正确的吗?还是所有字符串都被认为是真的 这是真的: var value = "0"; var isTrue = value ? true : false; // true 我以为===是为了严格平等 如果它已经改变了,有没有一种方法可以为了兼容性而采用旧方法 更新: 谢谢。我收到的值将始终是字符串,因此我将检查0和false: var booleanValue = value && value!=="0" && value!=="false"
var value = "0";
var isTrue = value ? true : false; // true
我以为===是为了严格平等
如果它已经改变了,有没有一种方法可以为了兼容性而采用旧方法
更新:
谢谢。我收到的值将始终是字符串,因此我将检查0和false:
var booleanValue = value && value!=="0" && value!=="false" ? true : false;
0是真的,因为它只是一个字符串并且有一个值,但是0作为一个数字被认为是假的所有包含字符的字符串都是真的。只有空字符串是假的。ª 0这个数字是错误的。0不是 我以为===是为了严格平等 是的。没有===签入代码。条件运算符?:不对条件操作数执行===检查。它执行布尔检查,就像if一样 如果使用==,则会得到false: 当然,在这种情况下,条件运算符没有意义:
var isTrue = value === true; // false
我收到的值将始终是字符串,因此我将检查0和false:
var booleanValue = value && value!=="0" && value!=="false" ? true : false;
这取决于你想做什么以及你可能得到什么样的价值。例如,如果您得到的是一个包含有效数字或有效布尔值的字符串(如您的示例所示),则可以使用JSON.parse将其解析为数字或布尔值:
var isTrue = !!JSON.parse(str);
这个!!使0和NaN转换为false,而非0或NaN的数字转换为true。但同样,这取决于您接收到的内容,带有您期望值的开关可能会更好,等等
1法尔西和特鲁西:
falsy-当用作布尔值时强制为false,例如在问题中的条件运算符中。falsy值为0、NaN、null、未定义,当然还有false
truthy-用作布尔值时强制为true。所有非虚假值都是真实值,包括0和false
这是javascript中所有falsy值的列表: 错误的 0 或 无效的 未定义 楠 只有字符串是falsy值,这意味着它是空字符串。
“0”是一个包含内容的字符串,因此它不是一个伪值,但0是一个。isTrue=value-使用赋值而不是比较的典型错误。您正在检查一个包含0而不是实际数字0的字符串 如果一个字符串等于,则认为该字符串为false,所有其他字符串都认为为true 如果数字为0或NaN,则认为该数字为假,所有其他数字都认为为真 ==实际上意味着严格相等,意味着对类型和值进行比较。因此:
true == 1 // true
true === 1 // false
实际上它的另一种方式是,对于任何字符串,它将返回True,对于0作为整数,它将返回False,对于1作为整数,它将返回True var值0=0; var值1=1; var-str=23123; var isTrue0=值0?真:假; var isTrue1=value1?真:假; var isTrueStr=str?真:假; console.log“0:”+isTrue0; console.log'1:'+isTrue1;
log'string:'+isTrueStr;这里0是字符串,它不是整数。规则枚举的是假字符串,其余的是真字符串。@justDan在我的情况下,我将始终接收字符串。我没有使用严格相等,所以我使用的是松散相等。我的错误是0作为字符串不被认为是错误的。@1.21gigawatts-并且您不是第一个这样做的人。:-最常让人感动的是虚假的真实。
"0" // string
0 // number
true == 1 // true
true === 1 // false