当前位置: 首页 > Web前端 > HTML

判断数据类型

时间:2023-03-28 18:11:26 HTML

判断数据类型数据类型js有六种数据类型,包括五种基本数据类型和一种复杂数据类型基本数据类型(值类型):Number、String、Boolean、Null、undefined。复杂数据类型:Object引用类型:Object、Array、Function、Date、RegExp值类型和引用类型的区别1、存储位置不同。值类型占用固定空间,存放在栈中。保存和复制的是值本身,可以使用typeOf()来检测值的类型。引用类型占用的空间不是固定的,存放在堆中。保存和复制的是指向对象的指针。需要使用instanceof()检测数据类型,使用new()方法构造的对象是引用类型。2、复制方式不同。值类型变量的直接赋值就是深拷贝,比如vara=10;变量b=a;那么a的值会被复制到b,b修改后的值不会影响a。数据的副本在内存中是完全独立的。引用类型的变量直接赋值其实就是传递引用,只是浅拷贝。就是把变量中存储的地址分配到一个单独的存储中,但是当两个变量中有一个对象被修改,访问另一个引用时,也会访问修改后的值。3、值类型不能添加属性和方法,而引用类型可以添加属性和方法。4.值类型的比较就是值的比较,只有它们的值相等才相等。引用类型的比较就是引用地址的比较。比较时,注意比较时双等号的类型转换,全等号表示值和类型相等。5.在函数中使用//值类型varnum=10;functionprint(num){num=100;控制台日志(数量);//100}console.log(num);//10//引用类型varobj={name:'jone'}functionprintObj(obj){obj.name='lucy';console.log(JSON.stringify(obj));//{"name":"lucy"}}console.log(JSON.stringify(obj));//{"name":"lucy"}值类型变量在函数中被修改时只在函数范围内生效,函数销毁时修改立即失效;而引用类型在函数中被修改时被修改的是运行时数据区中的值,即使函数被销毁,变量的值仍然被改变。判断数据类型方法1、typeoftypeofnull返回类型错误,返回对象引用类型,除了函数返回函数类型,其他都返回对象。Null有自己的数据类型Null,引用类型中的数组、日期、正则表达式也有自己特定的类型,而typeof对这些类型的处理只返回其原型链顶端的Object类型,这是正确的.,但不是想要的结果。typeofArray,Object,newClass()都会返回'object',所以使用typeof不能准确判断变量是否为objecttypeof[];//对象类型{};//objecttypeofnew(function(){});//对象类型1;//数字类型'1';//字符串类型为空;//对象类型为真;//boolean2,constructorconstructor是prototype原型的一个属性,当定义函数时,js引擎会为函数添加一个prototype原型,而在这个prototype中constructor属性指向一个函数引用,所以重写prototype会丢失原始构造函数。但是这个方法有问题:1:null和undefined没有构造函数,无法判断这个方法。2:还有,如果自定义对象,开发者重写原型后,原来的构造函数就会丢失。因此,为了规范开发,一般需要在重写对象原型时对构造函数进行重新赋值,以保证对象实例的类型不被篡改。({}).constructor===对象;//true(1).constructor===数字;//true([]).constructor===数组;//true('1').constructor===String;//true(true).constructor===布尔值;//truenewFunction().constructor==Function//true3.,instanceofinstanceof是指对象是否是指定类的实例instanceof用于判断A是否是B的实例,表达式为:AinstanceofB,如果A是B的实例,则返回true,否则返回false。这里需要特别注意的是:instanceof检测原型。从上图可以看出,[]的原型指向Array.prototype,间接指向Object.prototype,所以[]instanceofArray返回true,[]instanceofObject也返回true。instanceof只能用来判断两个对象是否属于实例关系**,而不能判断一个对象实例属于哪种类型。({})instanceof对象;//真([])实例数组;//true(1)instanceof数字;//true('1')instanceof字符串;//真(真)布尔实例;//true4,toStringtoString()是Object的原型方法。调用该方法默认返回当前对象的[[Class]]。这是格式为[objectXxx]的内部属性,其中Xxx是对象的类型。对于Object对象,直接调用toString()会返回[objectObject]。而对于其他对象,则需要通过调用/应用来调用才能返回正确的类型信息Object.prototype.toString.call('');//[对象字符串]Object.prototype.toString.call(1);//[对象编号]Object.prototype.toString.call(true);//[对象布尔值]Object.prototype.toString.call(Symbol());//[对象符号]Object.prototype.toString.call(undefined);//[对象未定义]Object.prototype.toString.call(null);//[objectNull]Object.prototype.toString.call(newFunction());//[对象函数]Object.prototype.toString.call(newDate());//[对象日期]Object.prototype.toString.call([]);//[对象数组]Object.prototype.toString.call(newRegExp());//[objectRegExp]Object.prototype.toString.call(newError());//[对象错误]Object.prototype.toString.call(document);//[对象HTMLDocument]Object.prototype.toString.call(window);//[objectglobal]window是全局对象global的引用