一、JS数据类型包含基本数据类型和复杂数据类型
(1)基本数据类型
- String
- Number
- Boolean
- undefined
- Null
- Symbol
(2)引用数据类型
引用数据类型是值对象类型Object type,最常用的是对象Object,数组Array,函数Function和Date
两种数据类型的区别:
1)声明变量时不同的分配内存
基本数据类型是存储在栈中的简单数据段,也就是说,他们的值直接存储在变量访问的位置
引用数据类型是存储在堆中的对象,存储在变量处的值是一个指针,指针存储对象的内存地址
2)不同的访问机制
基本数据类型可以直接访问
引用数据类型不可以直接访问,在需要访问时首先得到这个对象在堆中的内存地址,然后再通过地址去获取对象中的值。
3)复制变量时不同
基本数据类型再复制完成后是完全独立的,一个改变不影响另一个改变。引用数据类型在复制时只是将对象的内存地址赋值给了新变量,也就是说两变量都指向了堆内存中的同一个对象,一个的改变会影响另外一个。实现互不影响,需要进行深拷贝。
4)参数传递时不同
js中的参数都是按值传递的
基本数据类型将变量的值传递给参数后,变量和参数互不影响
引用数据类型只是将内存地址传进去,因此函数内存参数的改变会体现在外部
二、检验数据类型的方法有哪些?
- typeof(值)或者typeof值
1.console.log(typeof 1); 2.console.log(typeof 'kk'); 3.console.log(typeof true); 4.console.log(typeof null); 5.console.log(typeof undefined); 6.console.log(typeof Symbol()); 7.console.log(typeof {}); 8.console.log(typeof new Function()); 9.console.log(typeof new Array);
输出
1.number 2.string 3.boolean 4.object 5.undefined 6.symbol 7.object 8.function 9.object
typeof基本上可以识别所有的数据类型,但是识别不了null,对于引用数据类型,可以识别function,但是其他的都只能识别称Object
-
A instanof B ,判断A是否为B的实例
1.console.log([] instanceof Array); 2.console.log({} instanceof Object); 3.console.log([] instanceof Object); 4.console.log(new Function() instanceof Function); 5.console.log(new Function() instanceof Object);
输出都为true
instanceof只能用来判断两个对象之间是否属于实例的关系,而不能判断一个实例对象具体属于那种类型。比如 [] 是Array的实例也是Object的实例。具体可以通过原型链进行分析。那么针对数组的这种问题,可以使用Array.isArray()方法判断。
- constructor(除了null和undefined,他们不是由队形构建)
数字 var num = 1; num.constructor ƒ Number() { [native code] } 布尔值 true.constructor ƒ Boolean() { [native code] } 字符串 "".constructor ƒ String() { [native code] } 函数 var func = function(){} func.constructor ƒ Function() { [native code] } 数组 [].constructor ƒ Array() { [native code] } 对象 var obj = {} obj.constructor ƒ Object() { [native code] }
- toString() Object的原型方法
1.console.log(Object.prototype.toString()); 2.console.log(Object.prototype.toString.call({})); 3.console.log(Object.prototype.toString.call(1)); 4.console.log(Object.prototype.toString.call('')); 5.console.log(Object.prototype.toString.call(true)); 6.console.log(Object.prototype.toString.call(null)); 7.console.log(Object.prototype.toString.call(undefined)); 8.console.log(Object.prototype.toString.call(Symbol())); 9.console.log(Object.prototype.toString.call([])); 10.console.log(Object.prototype.toString.call(new Function()));
输出
1.console.log(Object.prototype.toString()); 2.console.log(Object.prototype.toString.call({})); 3.console.log(Object.prototype.toString.call(1)); 4.console.log(Object.prototype.toString.call('')); 5.console.log(Object.prototype.toString.call(true)); 6.console.log(Object.prototype.toString.call(null)); 7.console.log(Object.prototype.toString.call(undefined)); 8.console.log(Object.prototype.toString.call(Symbol())); 9.console.log(Object.prototype.toString.call([])); 10.console.log(Object.prototype.toString.call(new Function()));
可以实现所有数据类型的判断。
-
觉得有帮助点个赞吧~