1. typeof:判断基本数据类型
console.log(typeof('123'));
console.log(typeof(123));
console.log(typeof(true));
console.log(typeof(undefined));
console.log(typeof([1, 2, 3]));
console.log(typeof({a:1}));
2. constructor
const arr = [1, 2, 3];
console.log(arr.__proto__.constructor) ;
console.log(arr.constructor);
console.log(arr.constructor === Array);
console.log(arr.constructor === Function);
const arr = [1, 2, 3];
console.log(arr);
console.log(arr.__proto__);
console.log(Array.prototype);
console.log(Array.prototype.constructor);
2.1 问题1
console.log(undefined.constructor);
console.log(null.constructor);
2.2 问题2
- 能够判断引用数据类型,但是这个属性其实就是对象内的一个属性, 我们可以拿到这个对象, 然后修改他的属性值
const arr = [1, 2, 3];
console.log(arr);
Array.prototype.constructor = { a: 1 };
console.log(Array.prototype.constructor);
console.log(arr.__proto__.constructor === Array);
3. instanceof
- 可以判断 左边的构造函数是否等于右边的构造函数
- 语法: 检测的数据instanceof构造函数
- 问题: 不能判断undefined和null
const arr = [1,2,3,4]
const obj = {
a:1,
b:2
}
console.log(arr instanceof Array);
console.log(arr instanceof Object);
console.log(undefined instanceof undefined);
console.log(null instanceof null);
4. Object.prototype.toString.call(要判断的数据结构)
- Object 这个构造函数的原型内部 有一个toString的方法
- 这个方法能够帮我们将数据结构转为字符串的形式,‘[object 数据结构]’
- 我们在使用的时候 如果需要判断其他数据类型, 需要使用.call这个方法改变内部this指向
- 这个方法任何数据类型都能准确判断(推荐使用)
console.log(Object.prototype.toString.call(123));
console.log(Object.prototype.toString.call(undefined));
console.log(Object.prototype.toString.call(null));
console.log(Object.prototype.toString.call(function(){}));
console.log(Object.prototype.toString.call([]));