1. typeof 方法

  1. // javascript 内置方法
  2. // 使用方法一,推荐使用,便于维护
  3. typeof(123)
  4. // 使用方法二
  5. typeof 123
  6. // 原始值/基本类型
  7. typeof(123) -> "number"
  8. typeof('abc') -> "string"
  9. typeof(true) -> "boolean"
  10. typeof(undefined) -> "undefined"
  11. typeof(NaN) -> "number"
  12. typeof(null) -> "object"
  13. // 引用值
  14. // object = 引用类型
  15. typeof({name: "doudou"}) -> "object"
  16. typeof([1, 2, 3]) -> "object"
  17. typeof(() => {}) -> "function"
  18. // a 未声明
  19. console.log(a) -> 报错 a is not defined
  20. console.log(typeof(a)) -> "undefined"
  21. console.log(typeof(typeof(a))) -> "string"

*typeof(null) -> "object"是历史遗留问题:null是用于指向空对象的一个指针,也是空对象的一个占位符,早期被定义为引用类型。后有提议将null划分为null类型,ECMAScript为了不影响早期代码而没有采纳此提议

2. 显式类型转换

2.1 转换到number类型

2.1.1 Number()

  1. Number("abc") -> NaN
  2. Number("123") -> 123
  3. Number("123abc") -> NaN
  4. Number("true") -> NaN
  5. Number(true) -> 1
  6. Number(false) -> 0
  7. Number(null) -> 0
  8. Number(undefined) -> NaN

2.1.2 parseInt(val, radix)

  1. parseInt 只管将传入的 数字|字符串 转换为整数,并不会对变量进行类型转换 ```javascript parseInt(true) -> NaN parseInt(false) -> NaN

parseInt(null) -> NaN parseInt(undefined) -> NaN parseInt(NaN) -> NaN

  1. 2. 对于浮点数,parseInt 截取其整数部分返回,不进行四舍五入
  2. ```javascript
  3. parseInt("3.14") -> 3
  4. parseInt("3.84") -> 3
  1. parseInt 第二个指定数字的基数,默认为10,取值范围2-32
  • 对于数字,若为指定基数下合法的数字组合,则返回该数值的十进制值,否则返回NaN ```javascript parseInt(10, 16) -> 16 parseInt(12, 8) -> 10

parseInt(8, 8) -> NaN

  1. - 对于字符串,若以指定基数下合法的数字|字符开头,则返回合法部分数值的十进制值,否则返回NaN
  2. ```javascript
  3. parseInt("123") -> 123
  4. parseInt("10", 16) -> 16
  5. parseInt("a", 16) -> 10
  6. parseInt("z", 36) -> 35
  7. parseInt("z", 16) -> NaN
  8. parseInt("8", 8) -> NaN
  9. parseInt("abc") -> NaN
  10. parseInt("abc", 16) -> 2748
  11. parseInt("123abc") -> 123
  12. parseInt("abc123") -> NaN

2.1.3 parseFloat(string)

  1. parseFloat("3.14") -> 3.14
  2. parseFloat("3.14abc") -> 3.14
  3. parseFloat(3.14) -> 3.14

2.2 转换到string类型

2.2.1 String(val)

  1. String(123) -> '123'
  2. String(true) -> 'true'
  3. String(false) -> 'false'
  4. String(null) -> 'null'
  5. String(undefined) -> 'undefined'
  6. 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);

  1. -"123" -> -123
  2. -"abc" -> NaN
  3. -undefined -> NaN
  4. -null -> -0

3.1.2 ++ —

res = str++; 等价于 str = Number(str); res = str++;

  1. var str = "123";
  2. str++;
  3. 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))

  1. isNaN(NaN) -> true;
  2. isNaN(123) -> false;
  3. isNaN("123") -> false;
  4. isNaN("a") -> true;
  5. isNaN(null) -> false
  6. isNaN(undefined) -> true