美文网首页
JavaScript基础学习-数据类型及数据类型检测

JavaScript基础学习-数据类型及数据类型检测

作者: 不是王小贱 | 来源:发表于2017-03-14 15:57 被阅读39次

    1.JavaScript中的数据类型

    JavaScript的数据类型分为两类:原始类型、引用类型,二者在内存中的存储位置不同。

    原始类型

    原始类型也叫基本类型。有5种基本类型的数据,分别是:number、string、boolean、null、undefined。在ES6中还新增了Symbol。原始类型存储在内存栈中,也就是说直接存储的变量的值

    引用数据

    除了6种原始类型外,都是引用类型。主要有:Object、Array、Date、Error、RegExp、Function。在ES6种还新增了Promise、Map。引用类型的值是存储在内存堆中的的。也就是说直接存储的变量的值是一个指向原对象的内存指针。

    3.原始数据的检测

    检测原始类型时,都可以使用typeof操作符检测。typeof检测后会返回一个表示检测对象类型的字符串

    使用typeof进行原始类型检测时,其返回值分别为:

    • Number类型返回'number'
    • String类型返回'string'
    • Boolean类型返回'boolean'
    • Undefined类型返回'undefined'
    • Null类型返回'null'
    • Symbol类型返回'symbol'

    局限性:不能具体的细分是数组还是正则,还是对象中的其他值。对于对象数据类型返回都是object

    4.引用数据类型的检测

    instanceof方法

    检测某一个实例是否属于某一个类

    具体用法:

    • [] instanceof Array; //true

    局限性

    对于基本数据类型,字面量方式创建的结果和实例创建出来的结果是有区别的,从严格意义山来讲,从实例创建方式出来的结果才是标准的对象数据类型,也是各种基本数据类型类的实例

    • 不能用来检测和处理字面量方式创建出来的基本数据类型
    • 只要在当前实例的原型链上,就会用其检测出来的结果都是true
    • 在类的原型继承中,我们用其检测出来的结果未必准确

    constructor:构造函数(不常用)

    • 可以处理基本数据类型的检测

    局限性:我们可以把类的原型重写,再重写的过程中很可能出现把原来的原型覆盖掉,这时检测就不准确了

    Object.prototype.toString.call(val);

    最准确的方法。Object.prototype.toString它的作用是返回当前方法的执行主体(方法中的this)所属类的详细信息

    具体用法:

    • Object.prototype.toString.call([]);//'[object Array]';
    • 返回的是一个'[object Array]'。中括号中的第一项永远是一个小写的object。因为从根上来说,任何数据类型都都是一个对象。第二项表示当前要检测的数据,是一个首字母大写的数据类。
    • String\Boolean\Array\RegExp\Date\Function原型上的toString()方法都已经对Object中的toString()方法进行了重写,作用是把当前的数据类型转换为字符串的类型。

    对象属性检测

    检测对象属性时,可以使用in运算符,或者使用对象的实例方法hasOwnProperty()。前者不仅可以检测属性是否属于该对象,还可以检测该对象的原型链中的方法或属性是否属于该对象。而后者只检测该对象的私有属性和方法,不会去判断原型链中的属性和方法。

    事例:

         for(var key in obj){
            if(obj.hasOwnProterty(key)){
              //表明属于该对象的私有属性 和方法。
        }
      }
    

    所以我们一般判断属性是否属于该对象时,使用hasOwnProperty()

    相关文章

      网友评论

          本文标题:JavaScript基础学习-数据类型及数据类型检测

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