|
Javascript 数据类型
基本数据类型(存放在栈内存中, 当被引用和拷贝时会复制一个完全相等的变量)
- Number, String, Boolean, Symbol, Undefined, Null
引用数据类型(对象类型, 存放在堆内存中, 存储的是地址, 当引用和拷贝时,提供的是地址. 有共享地址的特征)
- Object
- Array
- RegExp
- Date
- Math
- Function
- const a = {
- name: "q"
- }
- const b = a;
- b.name = "b";
- console.log(a);// { name: "b" }, 体现了共享引用地址的特点
复制代码 判断数据类型的方法
typeof
- typeof 123; // "number"
- typeof "123"; // "string"
- typeof ""; // "string"
- typeof true; // "boolean"
- typeof function(){}; // "function"
- typeof Undefined; // "undefined"
- typeof null; // "object ", 可以使用=== 来判断
- typeof []; // "object"
复制代码 instanceof, 判断new 出来的复杂数据类型可以, 判断基本数据类型会有误
- "123" instanceof String; // false, 判断不出来
- const a = new String('123');
- a instanceof String; // true
复制代码 Object.prototype.toString.call(xx).slice(8, -1)
这个方法应该是很全的了,工作中建议使用此方法判断数据类型- Object.prototype.toString.call("123"); // ['object, Object']
- Object.prototype.toString.call("123").slice(8, -1); // 'Object'
- function testFunc() {
- console.log(123);
- }
- const r = Object.prototype.toString.call(testFunc).slice(8, -1);
- console.log(r); // "Function"
复制代码 手写一个实现- function getType(obj) {
- const type = typeof obj;
- if (type !== "object") return type;
- return Object.prototype.toString.call(obj).slice(8, -1);
- }
复制代码 总结
- typeof 可以判断基本数据类型(null除外),但是在判断引用数据类型中,除了function其他的也无法判断
- instanceof 可以判断复杂的引用数据类型, 但是不能正确判断基础数据类型
来源:https://www.cnblogs.com/gk1314/p/18527284
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|