这里写目录标题
一、数据类型
基本数据类型(7个)
- Number
- String
- Boolean
- Undefined
- null
- symbol:代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。
- BigInt
基本数据类型存放在内存的栈中。
引用数据类型(3个)
- Object
- Function
- Array
由于占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能。故引用数据类型存放在内存的堆中,在栈中存放堆的指针(地址)。
二、判断数据类型
1. typeof
(1)基本数据类型:除了null被判断为object,其他全部能判断
(2) 引用数据类型:数组、对象被判断为object、函数被判断为function
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof 'str'); // string
console.log(typeof []); // object
console.log(typeof function(){}); // function
console.log(typeof {}); // object
console.log(typeof undefined); // undefined
console.log(typeof null); // object
2. instanceof
instanceof原理:A instanceof B,查找B的原型是否处在A的原型链上
(1) 基本数据类型:不能判断
(2) 引用数据类型:数组、对象、函数全部可以判断
console.log(2 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false
console.log([] instanceof Array); // true
console.log(function(){} instanceof Function); // true
console.log({} instanceof Object); // true
3. constructor
在构造函数的原型中,有一个constructor属性指向原型对象,而实例化对象会拥有构造函数原型上的函数,所以实例化对象拥有constructor属性,且指向构造函数(无论这个实例化对象是基本数据类型还是引用数据类型)
例如:
console.log((2).constructor === Number.prototype.constructor) //true
(1)基本数据类型:除了null、undefined,其他全部能判断
(2) 引用数据类型:数组、对象、函数全部可以判断
console.log((2).constructor === Number); // true
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object); // true
4. Object.prototype.toString.call()
唯一所有类型都可以判断的方式
(1) 基本数据类型:全部可以判断,null、undefined也可以判断
(2) 引用数据类型:全部可以判断
var a = Object.prototype.toString;
console.log(a.call(2)); //[object Number]
console.log(a.call(true)); //[object Boolean]
console.log(a.call('str')); //[object String]
console.log(a.call([])); //[object Array]
console.log(a.call(function(){})); //[object Function]
console.log(a.call({})); //[object Object]
console.log(a.call(undefined)); //[object Undefined]
console.log(a.call(null)); //[object Null]
三、判断数组类型
1. instanceof
console.log(arr instanceof Array);
2. Array.isArray(arr)
console.log(Array.isArrray(arr));
3. Object.prototype.toString.call()
console.log(Object.prototype.toString.call(obj).slice(8,-1) === 'Array');
4. 通过原型链
console.log(arr.__proto__ === Array.prototype);
5. 通过constructor
console.log(arr.constructor === Array);
四、如何判断null
“===”