JS判断数据类型和 ES6类的语法

33 阅读1分钟

typeof

* 问题:只能检测基本数据类型
    //1.typeof
    console.log(typeof(''))
    console.log(typeof(100))
    console.log(typeof({})) // object
    console.log(typeof([])) // object
    console.log(typeof(null)) // object

constructor

* 语法: 数据结构.constructor
* 问题: null 和 undefined 不能使用
* 使用场景:一般用于引用数据类型
* 潜在问题:这是原型对象的某一个属性,我们是可以手动修改的
    //2.constructor
    function Person () {}
    const p1 = new Person()
    console.log(p1.constructor)
    console.log(Person.prototype)
    console.log(p1.constructor === Person) // true
    /**
     * 1.先在对象自身查找,如果找到直接使用,如果没有找到,会去对象的 __proto__ 内部查找
     * 2.相当于去了 Person 的 prototype 内部查找
    */

    console.log([].constructor === Array) // true
    console.log(null.constructor === Array) // 会报错,不能使用
    console.log(undefined.constructor === Array) // 会报错,不能使用
    console.log({}.constructor === Array) // false

Object.prototype.toString.call(要检测的数据)

* 返回值: [object 数据类型]  (字符串格式的,并且数据类型的首字母大写)
* 使用场景: 任意类型都可准确判断,所以大部分情况下都可以使用
    console.log(Object.prototype.toString.call([])) // [object Array]
    console.log(Object.prototype.toString.call({})) // [object Object]
    console.log(Object.prototype.toString.call(null)) // [object Null]
    console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
    console.log(Object.prototype.toString.call('')) // [object String]
    console.log(Object.prototype.toString.call(100)) // [object Number]

ES6类的语法

//2. ES6类的书写
     class Stu {
      //构造器,类似于 ES5 构造函数的函数体
      constructor (num) {
        this.name = '张三'
        this.age = num
      }

      //接下来的位置全都是 原型的书写位置
      init () {
        console.log('我是原型上的init方法')
      }
      abc () {
        console.log('我是原型上的abc方法')
      }
      move () {
        console.log('我是原型上的move方法')
      }
    }

    const s1 = new Stu(18)
    console.log(s1)
    const s2 = new Stu(189)
    console.log(s2)
    s1.init()
    s1.move()