javascript 隐式转换

        学习是一个枯燥无味的过程,有时候我们需要知道一些属性或者用法。但是那完全是不够的。当你还是个孩子的时候,也许你的衣服鞋子足够你穿,随着你年龄的增长,身高、体重增加。这时候你就会告诉妈妈,给我买新衣服。其实我们码农也是这样子的,当你在代码的世界里奋斗了几年,你就会发现自己真的缺少几套新衣服。而我们只能自己努力去找寻这些衣服。

一、运算符的隐式转换

   首先我们来看一个例子

var a=12,b="4",c=true,d=[];
//先看看+运算符操作
console.log(a+b);//124
console.log(b+a);//412
console.log(c+a);//13
console.log(d+a);//12
//再看看-号运算符操作
console.log(a-b);//8
console.log(b-a);//-8
console.log(b-c);//3
console.log(b-d);//4
//再看看/运算符操作
console.log(a/b);//3
console.log(b/a);//0.3333333333333333
console.log(b/c);//4
console.log(b/d);//Infinity
//再看看*运算符操作
console.log(a*b);//48
console.log(a*c);//12
console.log(a*d);//0
//再看看%求余操作
console.log(a%b);//0

通过上边的例子可以总结为:

  1.+两边类型不同的时候,数值+[],与布尔值会隐式转换。

  2.遇到数值+字符串的时候直接字符串拼接。

  3.遇到都是数值的时候计算结果。

二、if语句的隐式转换

  除了undefined ,null,false,"",+0,-0,NaN;之外。if("0"){}其他值都是正值

if("0") {
    console.log("0");
}

if("undefined") {
      console.log("undefined");
}
if("null") {
   console.log("null");
}

if("NaN") {
     console.log("NaN");
}

在这里一定要告诉小伙伴们(前端与后台)不要定义这样的数据,以至于你判断失误。

三、函数参数的隐式转换


  function fn(a){
    console.log(a+"123")
  }
  fn(01);

//结果是多少呢???

相信大家肯定会出错,不信你猜猜看??结果是1123;

再举个例子

function fn(a){
    console.log(a+"123")
}
fn(010);
//结果多少呢???

相信大家肯定会觉得是10123。其实答案是8123;

四、对象的隐式转换

看个例子

3*{valueOf:function(){
    return 2;
},toString:function(){
    return "4";
}}
//结果多少呢?

答案是6。如果没valueOf方法答案是12。如果valueOf与toString都没有则返回NaN

总结:

    javascript中的隐式转换还是需要大家时刻注意的,稍微不注意就会出现一些问题。之前我用if做类型判断的时候都出现过类似问题,当时还是懵懂少年,没有去深入追究。希望这篇文章对大家有所帮助。

原文地址:https://www.cnblogs.com/xiaoxiaokun/p/7222469.html