首页 » 技术分享 » Truthy、Falsy与true、false的区别

Truthy、Falsy与true、false的区别

 

Truthy和Falsy

介绍

这个truthy以及falsy该如何翻译,google了下没有这单词。其实想了想也不必翻译,按照中文的感性理解,不就是“对的”,“能返回否的东西”嘛!

像很多语言一样,javascript也支持boolean数据类型(有true和false两个值),不过特别的是,javascript中的任何对象都还隐含一个boolean值,这便是大家所说的truthy和falsy原则。我们可以很方便的使用这个隐含的属性,特别是在变量比较上(//if条件句)。掌握好这些特别的规则有助于调试我们的前端代码。

truthy和falsy值

以下的值都隐含有false属性:

  • false
  • 0(零)
  • “”(空串)
  • null
  • undefined
  • NaN(Not-a-Number 
    • 注意,这是个number类型!用来表示变量不是number的number类型,有些拗口)

除此之外的其他值隐含的均是true属性,像“0”(字符串)、“false”(字符串),还有空函数、空数组、空对象这些比较容易搞混的,都是能返回true。正常的变量像“abc”,1234之类的当然不必说啦,通通true。

举个例子吧:

var a = !!(0); // a的值为false var b = !!("0"); // b的值为true

与falsy值之间比较

关于falsy值之间的比较,分为以下几种情况

1.false、0、空串三者是可以互等的

var c = (false == 0); // true var d = (false == ""); // true var e = (0 == ""); // true

2.null和undefined可以互等,但是不与其他几种相等

var f = (null == false); // false var g = (null == null); // true var h = (undefined == undefined); // true var i = (undefined == null); // true

3.NaN,不与其他任何值相等,甚至与自己都不等(//六亲不认,失去自我)

var j = (NaN == null); // false var k = (NaN == NaN); // false

再补充一个小知识

javascript使用typeof(NaN),返回值是number,也就是说这个NaN还是个number类型。还好js提供了一个函数inNaN()用来判断一个变量是否是数字。 
如果你使用的时候有疑惑。。。 
用强等于吧,如下:

var l = (false == 0); // true var m = (false === 0); // false

另外一个比较特别的地方 
空数组,例如var a = [];是返回true的,但也得看你怎么用,区别如下:

if ( [] ) { // 这里的代码将会执行 } if ( [] == true ) { // 这里的代码不会执行 } if ( [] == false ) { // 这里的代码将会执行 }

也就是说,truthy和true还是不一样的,隐含有true属性的变量不可以认为它是true,它不是boolean类型!

转载自原文链接, 如需删除请联系管理员。

原文链接:Truthy、Falsy与true、false的区别,转载请注明来源!

0