一、检测数据类型(typeof)
通过 typeof 关键字检测数据类型
语法:console.log(typeof(age)
/ console.log(typeof age)
typeof 输出的内容全是以字符串形式输出的
注意(考点):
平常没有定义变量直接输出,如 console.log(a)就会报错,如 console.log(typeof(a))会得到 undefined,我们console.log(typeof(typeof(a)))会得到 string,因为输出的这个 undefined 是字符串类型的
提一嘴:
js的bug(特征): typeof null,得到的是object
二、数据类型转换
1. 显示类型转换
1.1 Number(数据)
- “123”转化为数字类型得到123,
- “ -123”转换后得-123,
- true 转换后得 1,
- false 转换后得到 0,
- null转换后得到 0,
- undefined 转换后得到 NaN,
- “a”转换后得到 NaN,
- “123a”转换后得到NaN,
所有的值经历了 Number 的转换都能变成数字类型,只不过有些转换不成具体的数字的用 NaN 表示
1.2 parseInt(数据) – 只保留整数
console.log(parseInt('1.23')); // 1
console.log(parseInt('-1.23'); // 1
parseInt() parseFloat()补充知识:
- 如字符串内包含数字与其他字符, 以数字开头则将带有数字的字符串转化为数字类型的整数,其余的砍掉。不以数字开头则返回NaN。
- 比如 parseInt(“123aa”); 返回 123
- 比如 parseInt(“aa123aa”); 返回 NaN
- true、undefined 等等转换后都是 NaN。
1.3 parseFloat(数据) – 转换为浮点数
与parseInt及其相似
console.log(parseFloat(‘1.23’)); //1,23
console.log(parseFloat(‘-1.23’)); // -1.23
console.log(parseFloat(‘2’)); // 2
1.4 String(数据)
转换为字符串(任何值都可以转)
1.5 变量.toString(进制)
1、他也可以把值转换为字符串,但是写法和 String 不一样。比如:var num = (123).toString();
2、给数字 toString,不能直接写成数字.toString(),会报错的,你必须给数字加个括
号,写成(数字).toString( )才可以,其他的不用加)
3、undefined 和 null 不能用 toString,会报错。
2. 隐式类型转换
(1) isNaN
isNaN 的作用是判断一个值是不是 NaN,比如 console.log(isNaN(NaN)),输出得 true, console.log(isNaN(123)),输出得 false,console.log(isNaN(“123”)),输出得 false,console.log(isNaN(“a”));输出得 true,console.log(isNaN(undefined))输出得 true。 其实经历了 isNaN 的值系统会先让他调用 Number 来判断他是不是 NaN,如果是,就返回 true,不是就返回 false。
(2) ++ --,+ -(正/负)
所有的值经过++和–的运算后都会先把他用 Number 转换为数字类型再计算,比如“1”++就等于数字类型的 2,“a”++就等于 NaN,+/-也一样,他调用的也是 Number,-“1”就等于数字类型的-1,+“a”就等于 NaN。
(3) 加号+
+如果加号两边有一边是字符串,他就会调用 String,把两个值连接起来,如果没有字符串,他就会调用 Number。
(4) 减号- * / %
减、乘、除、摩尔他都会先调用 Number 转换为数字类型再计算。
(5) && || !
!把他转换为布尔值再取反,所以他调用的是 Boolean,其实&&和||调用的也是 Boolean,它是把值转换为布尔值来判断真假的。
(6) > < >= <=
如果两个字符串比较,就会用自己的阿斯克码比较,如果字符串和数字比较,就会把字符串转换为数字。
(7) == !=
==和!=也会用隠式类型转换,输出 3==“3”就得到 true。
注意:有几个特殊的,比如 1>2<1 得 true,他会一个一个算,1>2 是 false,转换后是0,0<1 最后得 true。
还有 undefined 和 null 既不大于 0 又不小于 0 也不等于 0,所以 undefined==null(比较特殊,没有规则,系统定义的,系统规定他俩不能和数字比较,所以他和数字比较的时候也不会发生类型转换,就是不能比),NaN 不等于任何东西,包括自己。