在javascript中,是一个空字符串,作为布尔值总是为false
In javascript, is an empty string always false as a boolean?
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
, undefined
和null
总是被求值为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;
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- PHP strtotime()为JavaScript日期字符串返回false
- 字符串对象比较总是返回false
- 函数:根据字符串中是否存在子字符串返回 True/False
- 如果 HTML 标记仅存在于字符串的开头,则返回 false
- 如何转换“;“错误”;字符串转换为布尔值false
- 如何将对正在定义或未定义的变量的检查强制转换为读取True或False的字符串
- JavaScript字符串解析为false
- 如果上一个字符串为true,则返回false,否则为true-javascript
- 在javascript中,是一个空字符串,作为布尔值总是为false
- 当regex匹配测试字符串时,Javascript .test要么不返回任何值,要么返回false
- 字符串 '0' 在 javaScript 中为 true|false
- 相等字符串比较返回false
- 使用JavaScript将字符串转换为布尔值总是给出false
- 当使用JSON时,如何检查false.对空用户输入进行字符串化
- 空字符串在javascript中被视为false
- 为什么空字符串字面量在javascript中计算为false ?
- 列表中的Javascript字符串返回false
- Javascript:奇怪的行为' empty string '和' false '返回空字符串
- 比较两个外观相同的字符串时返回false