在javascript中,是一个空字符串,作为布尔值总是为false

In javascript, is an empty string always false as a boolean?

本文关键字:字符串 false 布尔值 javascript 一个      更新时间:2023-09-26

var a = '';
var b = (a) ? true : false;

var b将被设置为false

这是一个可依赖的已定义行为吗?

是。Javascript是ECMAScript的一种方言,ECMAScript语言规范清楚地定义了这种行为:

ToBoolean

如果实参为空String(长度为0),则结果为false;否则结果为true

引用自http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

是。所有false, 0,空字符串''"", NaN, undefinednull总是被求值为false;其他都是true

在你的例子中,b是计算后的false。(我想你把true写错了)

var a = '';
var b = (a) ? false : true;   // fixed!
console.log(b);               // => true

var b将设置为true

这是一个可依赖的已定义行为吗?

如上所述,,即在条件 (if表达式,||, &&, ? :,…)中定义的空字符串的行为。(标准规定必须应用内部ToBoolean操作。)

在比较中使用空字符串时,计算是不同的(参见真理,相等和JavaScript),即使结果基本相同:

// conditional (note: evaluation to false prints false here!)
console.log('' ? true : false); // zero length     => false
// comparisons
console.log('' == true);        // +0 === 1        => false
console.log('' == false);       // +0 === +0       => true
console.log('' === true);       // different types => false
console.log('' === false);      // different types => false

解释:本质上,当==的操作数具有不同的类型时,JavaScript会根据它们的(使用标准调用 tonnumber topprimitive 的操作)努力将它们转换为数字,然后在内部应用===。但是当你直接使用===时,类型不会被转换,所以比较字符串和布尔值总是false。 粗略地说,JavaScript 条件 (ToBoolean)测试定义的非空、非零、非空、非假值(空字符串是…空时,数字-0或+0是…0, NaN不是一个定义的数字,但是一个空对象显然不是真正的空),或者像我想的那样,条件测试是一个(真实的)东西,而==比较明显的,仔细转换的 ( topprimary tonnumber ), ===查找完全相同的
if (X) {}        // is X a (true) thing?
if (X == Y) {}   // are the values of X and Y same-ish?
if (X === Y) {}  // are X and Y exactly the same?

在Truth, Equality和JavaScript中有更多的例子,其中这种区别确实很重要,例如'0'在条件(非零长度,或者它是一个)中是true,但是false==比较中(为零)。同样,'1'在两种情况下都是true(它是一个物并且具有非零值)。

console.log('' ? true : false);   // zero length     => false
console.log('' == true);          // +0 === 1        => false
console.log('0' ? true : false);  // non-zero length => true
console.log('0' == true);         // +0 === 1        => false
console.log('1' ? true : false);  // non-zero length => true
console.log('1' == true);         //  1 === 1        => true

var b将设置为true。这是因为在JavaScript中,空字符串和其他一些值一样被视为'假'值。

请查看http://www.sitepoint.com/javascript-truthy-falsy/查看错误值

可以被转换为false的表达式的例子有求值为null、0、空字符串(")或未定义。(见MDN参考)

是的,你可以依赖这个行为。

更简短的写法是:

var b = !!a;