1. typeof 方法
// javascript 内置方法
// 使用方法一,推荐使用,便于维护
typeof(123)
// 使用方法二
typeof 123
// 原始值/基本类型
typeof(123) -> "number"
typeof('abc') -> "string"
typeof(true) -> "boolean"
typeof(undefined) -> "undefined"
typeof(NaN) -> "number"
typeof(null) -> "object"
// 引用值
// object = 引用类型
typeof({name: "doudou"}) -> "object"
typeof([1, 2, 3]) -> "object"
typeof(() => {}) -> "function"
// a 未声明
console.log(a) -> 报错 a is not defined
console.log(typeof(a)) -> "undefined"
console.log(typeof(typeof(a))) -> "string"
*typeof(null) -> "object"
是历史遗留问题:null是用于指向空对象的一个指针,也是空对象的一个占位符,早期被定义为引用类型。后有提议将null划分为null类型,ECMAScript为了不影响早期代码而没有采纳此提议
2. 显式类型转换
2.1 转换到number类型
2.1.1 Number()
Number("abc") -> NaN
Number("123") -> 123
Number("123abc") -> NaN
Number("true") -> NaN
Number(true) -> 1
Number(false) -> 0
Number(null) -> 0
Number(undefined) -> NaN
2.1.2 parseInt(val, radix)
- parseInt 只管将传入的 数字|字符串 转换为整数,并不会对变量进行类型转换 ```javascript parseInt(true) -> NaN parseInt(false) -> NaN
parseInt(null) -> NaN parseInt(undefined) -> NaN parseInt(NaN) -> NaN
2. 对于浮点数,parseInt 截取其整数部分返回,不进行四舍五入
```javascript
parseInt("3.14") -> 3
parseInt("3.84") -> 3
- parseInt 第二个指定数字的基数,默认为10,取值范围2-32
- 对于数字,若为指定基数下合法的数字组合,则返回该数值的十进制值,否则返回NaN ```javascript parseInt(10, 16) -> 16 parseInt(12, 8) -> 10
parseInt(8, 8) -> NaN
- 对于字符串,若以指定基数下合法的数字|字符开头,则返回合法部分数值的十进制值,否则返回NaN
```javascript
parseInt("123") -> 123
parseInt("10", 16) -> 16
parseInt("a", 16) -> 10
parseInt("z", 36) -> 35
parseInt("z", 16) -> NaN
parseInt("8", 8) -> NaN
parseInt("abc") -> NaN
parseInt("abc", 16) -> 2748
parseInt("123abc") -> 123
parseInt("abc123") -> NaN
2.1.3 parseFloat(string)
parseFloat("3.14") -> 3.14
parseFloat("3.14abc") -> 3.14
parseFloat(3.14) -> 3.14
2.2 转换到string类型
2.2.1 String(val)
String(123) -> '123'
String(true) -> 'true'
String(false) -> 'false'
String(null) -> 'null'
String(undefined) -> 'undefined'
String(NaN) -> 'NaN'
2.2.2 val.toString()
效果基本与String()相同
注意:null与undefined没有toString()方法,会报错
2.3 转换到boolean类型
2.3.1 Boolean(val)
val为 undefined, null, NaN, "", 0, false
时,返回false;其余全返回true
3. 隐式类型转换
3.1 string & number
3.1.1 +str -str
res = -str;
等价于 res = -Number(str);
-"123" -> -123
-"abc" -> NaN
-undefined -> NaN
-null -> -0
3.1.2 ++ —
res = str++;
等价于 str = Number(str); res = str++;
var str = "123";
str++;
console.log(str) => 124;
3.1.3 +
res = str + num;
等价于 res = str + String(num);
3.1.3 - * / %
string类型变量与number类型变量进行 - * / % 运算,等价于 Number(string) 与 number 进行运算
3.1.4 比较运算 > < == !=
string类型变量与number类型变量进行比较,等价于Number(string) 与 number 进行比较
注意:==== 和 !==不进行隐式转换
3.2 boolean & number
var res = 2 > 1 > 3;
-> var res = (2 > 1) > 3;
-> var res = true > 3;
-> var res = Number(true) > 3;
-> var res = 1 > 3;
-> false;
var res = 2 > 1 == 1
-> var res = true == 1;
-> var res = Number(true) == 1;
-> true;
注意:undefined 和 null 和 0 没有大小关系,但undefined == null
undefined > 0 || undefined < 0 || undefined == 0 -> false;
null > 0 || null < 0 || null == 0 -> false;
undefined == null -> true
undefined === null -> false
3.3 相关方法
3.3.1 isNaN()
isNaN(val)
,若val不是number类型,则等价于isNaN(Number(val))
isNaN(NaN) -> true;
isNaN(123) -> false;
isNaN("123") -> false;
isNaN("a") -> true;
isNaN(null) -> false
isNaN(undefined) -> true