一、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)
写什么东西都转换为字符串。
(6) Boolean()
(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" 优先级问题