js四种数据类型判断
// 1. 使用 constructor是不安全的,因为他的指向是可以改变的
// undefined 和 null没有 constructor属性
let bool = true
// console.log('bool.constructor === Boolean', bool.constructor === Boolean); //true
let nums = 1
// console.log('number.constructor', nums.constructor === Number); // true
let str = '牛哼'
// console.log('string.constructor', str.constructor === String); // true
let obj = { name: 'i love' }
// console.log('object.constructor', obj.constructor === Object); // true
// let fn = () => {}
let fn = function () { }
// console.log('function.constructor', fn.constructor === Function); // true
let arr = [1, 2, 3]
// console.log('array.constructor',arr.constructor === Array); // true
function Student(name) {
this.name = name
}
function Person(name) {
Student.call(this, name)
}
let stuu = new Student('niuheng')
console.log('构造函数 Student.constructor', stuu.constructor === Student); // true
// 2. typeof 判断 null 对象 数组 都是object ,不能静一步判断他们的类型
// 3. instanceof 不能区分 null 和 undefined, 对于基本类型,如果不是用new声明的也测不出来
// 对用使用了new声明的可以检测,而且还可以测出多种嵌套关系
// 4. Object.prototype.toString.call 相对全能, 但它不能检测非原生构造函数的构造函数名