js 的if()判断的误区

js的if语句,是把其他数据类型强制转为Boolean类型,其主要常见误区也就是对于js数据类型理解不够深入。首先说一下js的数据类型吧。

基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(独一无二[es6增加的])。

引用类型:对象(Object)、数组(Array)、函数(Function)。

基本类型直接存在栈内存中 引用类型的地址存在栈内存,内容存在堆内存中,这就牵扯到深拷贝可浅拷贝(浅拷贝只拷贝栈内存内容,对引用类型就会使得只使用了栈内存的地址)。扯远了。。。

今天主要说的是 if 语句把类型都强制转为Boolean类型的常见误区

一、通常会直接转为false的四种类型 (没有[] ,{}, function(){})

        尤其是[] 和{} 这两个可以继续执行if里的语句的! 还有就是数字0 会被做终止操作。尤其是vue内的v-if操作很容易把0搞掉

1.数字0

2.NaN

3.空字符串

4.null或undefined

二、"0" "null" "undefined"则会返回true

js这种弱类型语言,赋值啥类型就改成啥类型了,后台规范了还好,要是不规范,心里一万个草泥马。同样的代码这边好着,那边又不行了。算了也不能全怪后台,还是做一下类型判断。

三、if([]==false) 返回true  if({} == false) 返回false

妈蛋这是什么鬼  if([]) true   if([] == false) true; 心里是不是又是一万个草泥马。 

四、if([] == [])  为false  if({} == {}) 也为false 

至于三和四 原因是js == 运算符的处理问题 

js做 == 操作 经历过程如下

[] == false 经历以下的转化过程

([] == false)   ---->  ([] === +0)   ---->  (“”== +0)  ---->  (+0 == +0)  --->   true

也就经历了8 9 10 三个过程

因此判断数组和对象是否为空,常用length来判断

js鸭子型语言 是有很多弊端,在使用if语句时 根据自己实际需求和后台返回差异性,注意一些这样的问题也基本上能解决相应问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值