cc *_*ung 126 javascript string boolean
在javascript中,
var a = '';
var b = (a) ? false : true; // fixed!
Run Code Online (Sandbox Code Playgroud)
var b将被设置为false.
这是一个可以依赖的定义行为吗?
小智 177
是.Javascript是ECMAScript的一种方言,ECMAScript语言规范明确定义了这种行为:
ToBoolean
如果参数是空String(其长度为零),则结果为false; 否则结果是真的
报价取自http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Hos*_*ein 54
是.所有false,0空弦''和"",NaN,undefined,和null总是评价为false; 其他一切都是true.
在您的示例中,b是false在评估之后.(我想你错误地写了true)
Ora*_*afu 10
var a = '';
var b = (a) ? false : true; // fixed!
console.log(b); // => trueRun Code Online (Sandbox Code Playgroud)
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 => falseRun Code Online (Sandbox Code Playgroud)
说明:从本质上讲,当操作数==有不同的类型,JavaScript的力图将其转换为数字,根据自己的价值,(使用 操作标准调用ToNumber和ToPrimitive),然后在内部适用===.但是当你===直接使用时,类型不会被转换,所以总是将String与布尔值进行比较false.
粗略地说,JavaScript 条件(ToBoolean)测试定义的,非null,非零,非空,非假值(空String是......空,Numbers -0或+ 0是......零,NaN不是一个定义的数字,但是一个空的Object显然不是真的空的,或者我想,条件测试一个(真)的东西,同时==比较明显的,精心转换的值(ToPrimitive,ToNumber)它的操作数,并===寻找完全相同.
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?
Run Code Online (Sandbox Code Playgroud)
还有更多的例子真相,平等和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 => trueRun Code Online (Sandbox Code Playgroud)
var b将被设置为true.这是因为空字符串在JavaScript中被计为"falsey"值,其他值也是如此.
请查看http://www.sitepoint.com/javascript-truthy-falsy/了解虚假值
| 归档时间: |
|
| 查看次数: |
73194 次 |
| 最近记录: |