关于条件判断和类型转换

问题一:JavaScript的条件判断中,如果条件本身不是一个布尔值,代码可读性较差;但是完全是可以运行的。
先看下下面的代码执行情况:

if("hello"){ //条件是一个字符串
  console.log("hello"); //输出"hello"
}
if(""){  //条件是空字符串
  console.log("empty");//不会输出
}
if(" "){ //条件空格字符串
  console.log("blank"); //输出"blank"
}

解密:对于括号里面的表达式,会被强制转换成布尔类型。

原理

类型 结果
undefined false
null false
number +0,-0,或者NaN为false,其他为true
String 空字符串为false,其他都为true
Object true

问题二:类似"hello == true"的语句应该怎么计算值?
JavaScript在执行比较语句的时候会做强制类型转换,先看看具体的执行情况:

"" == 0  // true
" " == 0  //true
"" == true  //false
"" == false  //true
" " == true  //false
!" " == true  //false
!" " == false  //true
"hello" == true  //false
"hello" == false //true
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true

解密:

x y 结果
null undefined true
number String x == toNumber(y)
boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

toNumber

类型 结果
undefined NaN
null 0
boolean true为1,false为0
String "abc"为NaN,"123"为123

toPrimitive
对于Object类型,先尝试使用.valueOf方法获取结果。如果没有定义,在尝试调用.toString方法获取结果。
总结:对于大小判断,JavaScript的处理方式是转换成两个数字进行比较,比较特殊的null==undefined //true;对于普通的类型的转换遵循上面的表格,对于对象的转换要调用valueOf或者toString方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,267评论 0 13
  • 值类型转换将值从一种类型转换为另一种类型通常称为类型转换,这是显示的情况;隐式的情况称为强制类型转换。JavaSc...
    xpwei阅读 3,649评论 0 5
  • Javascript 中有6种基本类型(包括 symbol),以及对象类型,他们在不同的运算中会被系统转化为不同是...
    faremax阅读 872评论 0 3
  • 孩子的眼睛是不会飞的星星 星星是会飞的孩子的眼睛 星星是会飞的孩子的眼睛 孩子的眼睛是不会飞的星星 孩子的眼睛是星...
    152星球阅读 371评论 0 0