JavaScript 之 typeof 操作符 及 类型转换

    一、typeof操作符

作用: 返回值的类型,类型转换

值得六种返回类型:Number     string     boolean    object    undefined    function 

这里说一下特殊的返回类型:

返回值为object有三种情况:{}、null、数组类型[]

返回值为undefined情况:undefined

返回值为function情况:function 函数

例如:

var num = 123 ;
console.log(typeof(num));

二、类型转换

类型转换分为两种:显式类型转换、隐式类型转换。

首先来说一下显式类型转换

1、显式类型转换

(1)    Number(mix)

(2)    parseInt(string , radix)

(3)    parseFloat(string)

(4)    toFixed(radix)

(5)    String(mix)

(6)    Boolean()

(7)    toString(radix)

下面详细介绍一下以上类型转换:

(1)Number(mix)    

先看几个例子吧。

var num = Number("123");
console.log(typeof(num) +":"+ num);

结果如下:


当boolean经过Number时候

var bool = Number(true);
console.log(bool);
var boo = Number(false);
console.log(boo);

当undefined经过Number时候:

console.log(Number(undefined));

所有值只要经过Number都会转为数字类型。能转为数字的就转为数字,其它转为NaN。

console.log(Number("abc"));
console.log(Number("123abc"));

(2)    parseInt(string , radix)    

把值转换为整型(不进行四舍五入,直接切掉)

从数字位开始往下找,到非数字位剪切掉。

下面看一下例子:

var demo = parseInt("123");
console.log("demo:"+demo); 
var demo1 = parseInt(true);
console.log("demo1:"+demo1);
var demo2 = parseInt("123abc");
console.log("demo2:"+demo2);

    结果如下:


parseInt还可以进行进制转换,规则:以目标进制为基底,转换为十进制。

var demo3 = parseInt(1010,2);//把二进制1010转换为十进制
console.log("demo3:"+demo3);
var demo4 = parseInt(10,16);//把十六进制10转换为十进制
console.log("demo4:"+demo4);

结果如下:

(3)    parseFloat(string)

从数字位开始看,直到除了第一个点以外非数字位截止。

效果和parseInt雷同,不再赘述。

(4)    toFixed(radix)

保留小数位。
   
  (5)    String(mix)

写什么东西都转换为字符串。

(6)    Boolean()

 undefined     null     NaN    ""    0    flase     ==     转换为bool值为false ; 其余为true。

(7)    toString(radix)

以十进制为基底转换为目标进制。

注意:undefined    null    不能使用toString。 

例子:


进制转换例题:把二进制转换为十六进制。

二进制——>十进制——>十六进制

        parseInt            toString

var demo = 1010;
var num = parseInt(demo,2);
var num1 = num.toString(16);
console.log(num1);

三、隐式类型转换

内部调用显式类型转换的方法

(1)    isNaN

(2)    ++/--    +/-

(3)    +

(4)    * /%

(5)    && || !

(6)    <     >    <=    >=

(7)    ==    !=


以上前五个要调用显式类型里面的Number();

(6)(7)要调用显式类型的Boolean()。

下面介绍几种特殊的情况:


NaN是非数,不等于任何。


其中不发生类型转换的有         ===(绝对等于)    !==(绝对不等于)【ps:两边必须长得一样才成立】

Last but not least!

未定义变量当且仅当放在typeof中不报错,并可打印undefined;



最后一道小题可能我们会忽略的某个点。

console.log(typeof(typeof(a)));打印结果会是什么?



哈哈,与你想的结果一样吗?



补充几道隐式类型转换的题目:

var str = flase + 1 ;       
console.log(str);
var demo = false == 1;
console.log(demo);
if(typeof(a) && -true + (+undefined) + "" ){
    console.log('基础扎实');
}
if(11 + "11" * 2 == 33){
    console.log('基础扎实');
}
!!" " + !!"" - !!false||console.log('哈哈哈');

结果:

1

false

基础扎实

基础扎实

不能打印



知道为什么吗?

" "  空格字符串   boolean值为true
""   空串        boolean值为false
(window.foo || (window.foo == 'bar'));       ------>  "bar"
优先级问题


猜你喜欢

转载自blog.csdn.net/qq_41713692/article/details/79755046