typeof,类型转换

一:数据类型用typeof()

number,string,object,function,undefined,boolean 注意有个bug是
typeof(null)的结果是object
注意:未经定义的变量会报错,但是使用typeof()的时候不会报错,会打印undefined
另外typeof(typeof(undefined))的结果为
在这里插入图片描述
这是因为typeof()返回的都是字符串类型的结果,比如"undefined","number"等

在这里插入图片描述

  <script>
    console.log(typeof(a));//undefined
    console.log(typeof(undefined));//undefined
    console.log(typeof(NaN));//number
    console.log(typeof(null));//object
    var a="123abc"
    console.log(typeof(+a));//number
    console.log(typeof(!!a));//boolean
    console.log(typeof(a+""));//string
    console.log(typeof(1=="1"));//boolean
    console.log(typeof(NaN==NaN));//boolean
    console.log(typeof(NaN==undefined));//boolean
    console.log(typeof("11"+11));//string
    console.log(typeof(1==="1"));//boolean
    console.log(parseInt("123abc"));//123
    var num=123123.3456789;
    console.log(num.toFixed(3));//123123.346
    console.log(typeof(typeof(a)));//string
    </script>

二:Number将数据转换为number类型

转换不了的NaN

<script>
        //   var num=Number('123')
        var num = Number(true)
        var num = Number(null)
        var num = Number(undefined)
        console.log(typeof (num) + num);
    </script>

三:parseInt转换为整型

 <script>
        //    var demo="132ac";
        var demo = "false"
        var test = parseInt(demo);
        console.log(typeof (test) + ":" + test);
    </script>

四:其他类型转换

String,toString,Boolean,parseFloat
注意:null和undefined不能用toString,并且使用toString时,和其他类型转换方法不同 ,是demo.toString()

var demo = "abc";
var test = demo.toString();

五:隐式转换

1.isNaN

内部先Number(),再将结果与NaN比对,如果是NaN就返回true,不是则返回false

    <script>
        console.log(isNaN(123));
         // console.log(Number('abc'));
        console.log(isNaN('abc'));
        // console.log(Number(null));//0
        console.log(isNaN(null));//false
        // console.log(Number(undefined))
        console.log(isNaN(undefined));//true
    </script>

2.++/–

内部先Number

<script>
        var demo="123"
        // demo++
        demo--
        console.log(demo);
    </script>

3.正负±

内部Number,虽然有些转换不成数字,但是类型也会被强制转换为数字类型

<script>
        var demo=+"abc"
        console.log(typeof(demo)+":"+demo);
    </script>

4.加号+

String() 只要有字符串+数字,都会转换为字符串

 <script>
        var demo=123+"abc"
        console.log(typeof(demo)+":"+demo);
    </script>

5.-*/%减乘除模

Number()

<script>
        var demo=123/"abc"
        console.log(typeof(demo)+":"+demo);
    </script>

注意:字符串减字符串会转换为数字,乘除模亦是
在这里插入图片描述

6.控制台上测试null和undefined

在这里插入图片描述

7.唯一一个自己不等于自己的

在这里插入图片描述

六:不发生类型转换 ===和`!==

`
发生类型转换容易出错,所以我们都用绝对等于和绝对不等于

在这里插入图片描述

七:例题

1.

 <script>
  var str=false+1;
  document.write(str)//false不是字符串,false为0  0+1=1
  var demo=false==1;
  document.write(demo);//false
  if(typeof(a)&&-true+(+undefined)+""){
     
     //"undefined"&&-1+"NaN"+""    -1+NaN还是 NaN。空串是字符串,NaN+空串为字符串“NaN"  最后"undefined"和"NaN"都是字符串。&&上为真
    document.write('基础扎实');
  }
  if(11+"11"*2==33){
     
     
    document.write("基础扎实")
  }
  !!" "+!!""-!!false||document.write('不能打印')//双重否定,true+false-false=>1+0-0  1//document.write(),由于1为真,符号为或,所以到1为真就停了,不执行document.write了
  </script>

2.

 <script>
    /*在js中将函数声明表达式转换为函数表达式,只需要在函数声明前面加上 +,-,=,~ 或 ! 等运算符或者()抱起来就行了。*/
    /*“()”在js中有多种含义,在这里是作为强制运算符。
    强制运算符内部必须是一个表达式,也就是说function test(){}会被认为是一个表达式,
    就像匿名函数一样:function(){} 。
    但是稍有不同,这是个带名字的匿名函数(Named function expression),
    这个名字在外部是无法访问的,只能在函数内部访问,所以调用会报错。
    最后提一点,javascript里小括号是没有作用域的。

*/
    
  var x=1;
  if(function f(){
     
     }){
     
     //if这个括号把function变成了表达式,立即执行了,结果是true,加到括号里去,f就找不到了,undefined
    x+=typeof f; 
  }
  console.log(x);
 
  </script>

猜你喜欢

转载自blog.csdn.net/x1037490413/article/details/108823990