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); // => true
Run 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 => false
Run 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 => true
Run Code Online (Sandbox Code Playgroud)
var b
将被设置为true
.这是因为空字符串在JavaScript中被计为"falsey"值,其他值也是如此.
请查看http://www.sitepoint.com/javascript-truthy-falsy/了解虚假值