js数据类型分为两类简单数据类型,和复杂数据类型

七种原始数据类型

  • number 用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
  • bigint 用于任意长度的整数。
  • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
  • boolean 用于 true 和 false。
  • null 用于未知的值 —— 只有一个 null 值的独立类型。
  • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
  • symbol 用于唯一的标识符。

复杂数据类型

  • Object
  • Array
  • Function

数据的存放

数据类型 - 图1


堆内存(HEAP)和 栈内存(STACK)

数据存放在内存里面,内存分:栈区(stack),堆区(heap)。
其中简单数据类型的数据存放在栈
复杂数据类型的数据存放在堆,在栈中存的只是一个堆内地址的引用

数据类型及校验方法

typeof

typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等。

  1. // 数值、字符串、布尔值分别返回number、string、boolean。
  2. typeof 123 // "number"
  3. typeof '123' // "string"
  4. typeof false // "boolean"
  5. //函数返回function。
  6. function f() {}
  7. typeof f // "function"
  8. //undefined返回undefined。
  9. typeof undefined // "undefined"
  10. //对象返回object。
  11. typeof window // "object"
  12. typeof {} // "object"
  13. typeof [] // "object"
  14. /**
  15. 上面代码中,空数组([])的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。这里顺便提一下,instanceof运算符可以区分数组和对象。
  16. */
  17. //null返回object。
  18. typeof null // "object"

instanceof

instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。

注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

  1. var a = 8,
  2. b = new Number(8);
  3. console.log(a instanceof Number); //false
  4. console.log(b instanceof Number); //true
  5. console.log(8 instanceof Number); //false
  6. //其他数值类型也同数值一样
  7. var obj = { id: 1 }, //因为{}==new Object()
  8. obj2 = new Object();
  9. obj2.id = 2;
  10. console.log(obj instanceof Object); //true
  11. console.log(obj2 instanceof Object); //true
  12. console.log(null instanceof Object); //false
  13. var arr = [ 1, 2, 3 ]; //因为[]==new Array()
  14. console.log(arr instanceof Object); //true
  15. console.log(arr instanceof Array); //true
  16. var fn = function() {
  17. console.log('jjjj');
  18. };
  19. console.log(fn instanceof Object); //true
  20. console.log(fn instanceof Function); //true
  21. var sy = Symbol('a');
  22. console.log(sy instanceof Symbol); //false

toString 对象原型链判断方法

适用于所有类型的判断检测,注意区分大小写. toString方法,在Object原型上返回数据格式,

  1. console.log(Object.prototype.toString.call("123")) -------->[object String]
  2. console.log(Object.prototype.toString.call(123)) -------->[object Number]
  3. console.log(Object.prototype.toString.call(true)) -------->[object Boolean]
  4. console.log(Object.prototype.toString.call([1, 2, 3])) -------->[object Array]
  5. console.log(Object.prototype.toString.call(null)) -------->[object Null]
  6. console.log(Object.prototype.toString.call(undefined)) -------->[object Undefined]
  7. console.log(Object.prototype.toString.call({name: 'Hello'})) -------->[object Object]
  8. console.log(Object.prototype.toString.call(function () {})) -------->[object Function]
  9. console.log(Object.prototype.toString.call(new Date())) -------->[object Date]
  10. console.log(Object.prototype.toString.call(/\d/)) -------->[object RegExp]
  11. console.log(Object.prototype.toString.call(Symbol())) -------->[object Symbol]

总结

一般变量用typeof,
已知对象类型用instanceof,
通用方法Object.prototype.toString.call()

或者lodash的各种判断的方法

基础数据类型转换

转字符串

.toString()

注意,不可以转null和underfined

  1. //转为字符串-->toString方法
  2. var bool=true;
  3. console.log(bool.toString());
  4. //注意,toString不能转null和underfined.

String()

  1. console.log(String(null));

隐式转换

  1. var a=true;
  2. var str= a+"";
  3. console.log(str);

模板字符串(常用)

  1. console.log(`${true}`);

转数值类型

Number()

Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN

  1. console.log(Number(true));

parseInt

  1. var a="12.3px";
  2. console.log(parseInt(a));
  3. //结果:12.3. 如果第一个字符是数字会解析知道遇到非数字结束.
  4. var a="abc2.3";
  5. console.log(parseInt(a));
  6. // 结果:返回NaN,如果第一个字符不是数字或者符号就返回NaN.

parseFloat

parseFloat()把字符串转换成浮点数,parseFloat()和parseInt非常相似,不同之处在与parseFloat会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数。

  1. var str="123";
  2. var num=str-0;
  3. console.log(num);
  4. //结果为数值型;

隐式转换

  1. console.log(+'111')
  2. console.log('111'*1)

转布尔值

Boolean

  1. console.log(Boolean(2));