JS中数据类型的检测方法与ES6新增

55 阅读2分钟

判断数据类型

1.typeof
    问题:只能检测基本数据类型(不包括 null)
2.constructor
    语法:数据机构.constructor
    问题:nullundefined 不能使用
    使用场景:一般用于引用数据类型
    潜在问题: 这是一个原型对象的某一个属性, 我们可以手动更改
    例: console.log([].constructor )  //会返回该  数据的  原型函数
        console.log(null.constructor === Array) //会报错,不能使用
        console.log(undefined.constructor === Array) //会报错,不能使用
        console.log({}.constructor === Array)  //会报错,不能使用
        
3.Object.prototype.tiString.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]
        

ES6 类的语法

1.构造函数 不加 new 也能使用, 只是没有意义
2.构造函数与原型上的内容  需要分开写
例: ES6 的书写
    class Fn {
        //构造器,类似于ES5中 构造函数的函数体
        constructor (name,age) {
            this.name = name
            this,age = age
        }
        //以下位置全都是  原型的书写
        fn1 () {
            console.log('我是 原型 上的 fn1 方法')
        }
        fn2 () {
            console.log('我是 原型 上的 fn2 方法')
        }
    }
    const p1 = new Fn ('彭于晏', 41)
    console.log(p1)
    p1 fn1()
    console.log(p1.__proto__)
    

ES6 补充

1.模板字符串
        在 ES5 中要么是 单引号包裹,要么是双引号包裹
        而 ES6 中推出的 模板字符串是 使用 `` 反双引号包裹的
    和之前的区别
        1.反引号能够换行, 但是单引号双引号不行
        2.内部如果书写的有 ${} 然后在内部可以识别出变量
        
2.展开运算符
        在 ES6 推出了展开运算符 ...
        能够展开 数组 和 对象
        例: let arr  = [1, 2, 3]
             console.log(...arr) //1 2 3
    2.1合并数组
        例:
            let arr = [1, 2, 3, 4]
            let arr2 = [...arr, 25, 56, 99]
            console.log(arr2) //[1, 2, 3, 4, 25, 56, 99]
    2.2函数传参
        例:
            let arr = [1, 2, 3, 4]
            function fn (a, b, c, d) {
                console.log('fn 函数的 形参:', a, b, c, d)
            }
            fn(arr[0], arr[1], arr[2], arr[3]) //l老方法
            fn(...arr) //运用展开运算符 传参
    2.3展开对象
         例:
             let obj = {
                 a: 1,
                 b: 2
             }
             let obj2 = {
                 ...obj,
                 c: 52,
                 d: 99
             }
            console.log(obj2) //输出obj和obj2综合的一个对象
3. 简写对象中的函数
    let obj = {
                 a: 1,
                 b: 2
             }
    let obj2 = {
        ...obj,
        fn:function(){
            console.log('我是对象 obj2 属性fn 的属性值')
        },
        // 简写函数
        fn1(){
            console.log('我是 fn 函数的简写')
        }
    }
    obj2.fn()
    obj2.fn1()