判断数据类型、ES6类的语法

61 阅读2分钟

判断数据类型

1.typeof

  • 问题:只能检测基本数据类型

2.constructor

  • 语法:数据结构.constructor
  • 问题:null和 undefined不能使用
  • 使用场景:一般用于引用数据类型
  • 潜在问题:这个原型对象的,某一个属性,我们是可以手动更改的

3.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(123)) //[object Number]

ES6 类的语法

ES5 构造函数的问题:

  • 1.构造函数不加 new 也能使用,只是没有意义
  • 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(168)
    console.log(s2)
    s1.init()
    s2.move()

ES6 补充

模板字符串

  • 在ES5中要么是单引号包裹要么是双引号包裹

  • 而ES6中推出的模板字符串是使用``反引号包裹的

和之前的区别
  • 1.反引号能够换行,但是单引号双引号不行

  • 2.内部如果书写的有 ${} 然后在内部可以识别出变量

展开运算符

在 ES6 推出了展开运算符 ...能够展开数组或者对象

    let arr = [1, 2, 3]
    console.log(arr) //[1, 2, 3]
    console.log(...arr) //1 2 3

    // 2.1合并数组
    let arr2 = [...arr, 100, 101, 102]
    console.log(arr2) //[1, 2, 3, 100, 101, 102]

    // 2.2函数传参
    function fn(a, b, c) {
      console.log(a, b, c) //1 2 3
    }
    // fn(arr[0], arr[1], arr[2])
    fn(...arr)

    // 2.3展开对象
    let obj = {
      a: 1,
      b: 2
    }
    // console.log(...obj) //这个代码不符合语法规范
    let obj2 = {
      ...obj,
      c: 100,
      d: 200
    }
    console.log(obj2) //{a: 1, b: 2, c: 100, d: 200}

对象简写语法

  • 1.当对象的key与value相同的时候,并且value是一个变量,那么可以省略其中一个不写
  • 2.函数简写
    let name = '张三'
    let obj = {
      // name: '张三'
      // name: name
      name,
      fn: function () {
        console.log('我是对象obj属性fn的属性值')
      },
      // 简写
      fn1() {
        console.log('我是fn1函数')
      }
    }
    console.log(obj)
    obj.fn()
    obj.fn1()