美文网首页
js中的内置类型

js中的内置类型

作者: 练习时长2年半的个人练习生 | 来源:发表于2020-06-20 20:35 被阅读0次

    内置类型

    js一共有七种内置类型

    • Number
    • String
    • Boolean
    • null
    • undeifned
    • Object
    • Symbol

    Array Function Map Set 等都属于Object的子类型
    其中除了Object都是值类型, Object是引用类型

    判断类型

    • 通过typeof 可以判断除了null之外的六种类型,typeof null 返回值是ojbect 这是js的一个bug
      可以通过以下方法判断
       let a= null;
       (!a && typeof a == 'object') //true
    

    补充:!运算符判断各种类型的结果

         let  a;
         console.log(!a)
         let b = null
         console.log(!b)
         let c = 0
         console.log(!c)
         let d = undefined
         console.log(!d)
    

    Function类型

    • Function是Object的子类型.具体说就是一个可调用的对象.它有一个内部属性[[call]]该属性使其可以被调用.
    • 函数不仅是对象,还可以拥有属性, length 就是表示函数声明时的参数个数.除此外还可以对他添加自定义属性
        function fn (a,b){}
        fn.sex ="男"
        console.log(fn.sex)//男
        console.log(fn.length)//2
    
    • instanceof运算符 本身就不是用来判断类型的.而是用来判断 函数对象的prototype 有没有出现在对象的原型链上. 所以说用instanceof来判断类型本身就不合理.
      所以才会出现以下情况
        let str = '123';
        console.log([1,2,3] instanceof Array)//true
        console.log([1,2,3] instanceof Object) //true
    

    因为所有类型的实例的[[prototype]]都会关联到Object.prototype
    所有任何类型的实例都能调用Object.prototype上的toString方法,
    每个类型又对toString进行了改写.所以,还得用Object.prototype上的toString 方法

       let str ='AAA'
       console.log(str.__proto__ === String.prototype)
       console.log(String.prototype.__proto__ === Object.prototype )
       let num =11
       console.log(num.__proto__ === Number.prototype)
       console.log(Number.prototype.__proto__ === Object.prototype )
       function fn(){}
       console.log(fn.__proto__ == Function.prototype)
       console.log(Function.prototype.__proto__ == Object.prototype)
    //都返回true
    

    Object.prototype.toString返回一个表示该对象的字符串。
    Array ,String,Number 等在自己的原型上对该方法进行了重写

     let letters = {
        a: 1,
        b: 'strings',
        c: undefined,
        d: new Map(),
        e: new Set(),
        f: null,
        g: {},
        h: [],
        i: Symbol(),
        j: function () { },
        k: true,
      }
      for (let key in letters) {
        let dataType = Object.prototype.toString.apply(letters[key])
        console.log(type)
      }
    //  [object Number]
    //  [object String]
    //  [object Undefined]
    //  [object Map]
    //  [object Set]
    //  [object Null]
    //  [object Object]
    //  [object Array]
    //  [object Symbol]
    //  [object Function]
    //  [object Boolean]
    

    相关文章

      网友评论

          本文标题:js中的内置类型

          本文链接:https://www.haomeiwen.com/subject/hdmgxktx.html