基本数据类型
number: NaN\Infinity\正常数字
string: 正常字符串\模版字符串
boolean: true\false
null: 空 typeof null ==> "object"
undefined: 未定义
symbol: 唯一值
bigInt: 大数字
引用数据类型
object function symbol
数据类型判断
- typeof 对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用
typeof {} // object
typeof [1,2] // object
typeof /\s/ //object
- instanceof 判断 new 关键字创建的引用数据类型 不考虑 null 和 undefined(这两个比较特殊)以对象字面量创建的基本数据类型
console.log(arr instanceof Array ); // true
console.log(date instanceof Date ); // true
console.log(fn instanceof Function ); // true
- constructor 似乎完全可以应对基本数据类型和引用数据类型 但如果声明了一个构造函数,并且把他的原型指向了 Array 的原型,所以这种情况下,constructor 也显得力不从心
console.log('数据类型判断' - constructor);
console.log(arr.constructor === Array); //true
console.log(date.constructor === Date); //true
console.log(fn.constructor === Function); //true
- Object.prototype.toString.call() 完美的解决方案
Object.prototype.toString.call();
console.log(toString.call(123)); //[object Number]
console.log(toString.call('123')); //[object String]
console.log(toString.call(undefined)); //[object Undefined]
console.log(toString.call(true)); //[object Boolean]
console.log(toString.call({})); //[object Object]
console.log(toString.call([])); //[object Array]
console.log(toString.call(function(){})); //[object Function]
- jquery.type()如果对象是undefined或null,则返回相应的“undefined”或“null”。
基本数据类型和引用数据类型的区别
存储位置不同:
基本数据类型存储在栈中
引⽤类型的对象存储于堆中
堆栈(内存) 这门语言在内存中的调用和读取
图片