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 definedconsole.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") -> NaNNumber("123") -> 123Number("123abc") -> NaNNumber("true") -> NaNNumber(true) -> 1Number(false) -> 0Number(null) -> 0Number(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 截取其整数部分返回,不进行四舍五入```javascriptparseInt("3.14") -> 3parseInt("3.84") -> 3
- parseInt 第二个指定数字的基数,默认为10,取值范围2-32
- 对于数字,若为指定基数下合法的数字组合,则返回该数值的十进制值,否则返回NaN ```javascript parseInt(10, 16) -> 16 parseInt(12, 8) -> 10
parseInt(8, 8) -> NaN
- 对于字符串,若以指定基数下合法的数字|字符开头,则返回合法部分数值的十进制值,否则返回NaN```javascriptparseInt("123") -> 123parseInt("10", 16) -> 16parseInt("a", 16) -> 10parseInt("z", 36) -> 35parseInt("z", 16) -> NaNparseInt("8", 8) -> NaNparseInt("abc") -> NaNparseInt("abc", 16) -> 2748parseInt("123abc") -> 123parseInt("abc123") -> NaN
2.1.3 parseFloat(string)
parseFloat("3.14") -> 3.14parseFloat("3.14abc") -> 3.14parseFloat(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 -> trueundefined === 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) -> falseisNaN(undefined) -> true
