js学习总结----数据类型检测的四种方式(转载)

1、typeof 用来检测数据类型的运算符 

console.log(typeof 12)//Number

  使用typeof检测数据类型,首先返回的都是字符串 ,其次字符串中包含了对应的数据类型

  例如:"number"、"string"、"boolean"、"undefined"、"function"、"object"

  console.log(typeof typeof function(){}) //string

  局限性:

    typeof null -> "object"

    不能具体的细分是数组还是正则,还是对象中其他的值,因为使用typeof检测数据类型,对于对象数据类型中的值,最后返回的结果都是"object"

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

var obj = [12,23];
        console.log(obj instanceof Array);

  局限性:

  对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有一定的区别的。从严格意义上讲,只有实例创建出来的结果才是标准的对象数据类型值,也是标准的Number这个类的一个实例;对于字面量方式创建出来的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散特点,导致了可以使用Number.prototype上的方法

  1)、不能用来检测和处理字面量方式创建出来的基本数据类型值

console.log(1 instanceof Number);//false
        console.log(new Number(1) instanceof Number)//true

  2)、instanceof的特性:只要在当前实例的原型链上,我们用其检测的结果都为true

var ary = [];
        console.log(ary instanceof Array);//true
        console.log(ary instanceof Object);//true

        function fn(){

        }
        console.log(fn instanceof Function);//true
        console.log(fn instanceof Object);//true  

3、constructor 构造函数  作用和instanceof非常的相似   constructor可以处理基本数据类型的检测

constructor检测Object和instanceof不一样 一般情况下是检测不了的

var obj = [];
        console.log(obj.constructor === Array)//true

        var num = 1;
        console.log(num.constructor === Number)//true

  局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖掉了,这样检测出来的结果就不准确了。

  对于特殊的数据类型null和undefined,他们所属的类是Null和Undefined,但是浏览器把这两个类保护起来了,不允许我们在外面访问使用

4、Object.prototype.toString.call()  最准确最常用的方式  各种类型的都可以检测(基本和引用)

  首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向

  toString的理解:

  表面上看应该是转化成字符串,但是某些toString方法不仅仅是转换为字符串

  对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前的数据类型转化为字符串的类型(他们的作用仅仅是用来转换为字符串的)

  Object.prototype.toString()并不是用来转化为字符串的,他的作用是返回当前方法执行主体(方法中的this)所属类的详细信息。  

({name:"李四"}).toString() //[object object]
        Math.toString()//[object Math]
({name:"李四"}).toString() //[object object]
        Math.toString()//[object Math]

        var obj = {name:"张三"};
        console.log(obj.toString())//toString中的this是obj,返回的是obj所属的类的信息。[object Object] 第一个object代表当前实例是对象数据类型的(这个是固定的),第二个Object代表的是obj所属的类是Object

  console.log((1).toString()) // "1"  Number.prototype.toString转化为字符串

  console.log((128).toString(2/8/10))  把数字转化为2进制、8进制、10进制

  所以上面的方法的检测如下 

var ary = [];
        console.log(Object.prototype.toString.call(ary))//[object Array]
时间: 2024-10-06 21:48:10

js学习总结----数据类型检测的四种方式(转载)的相关文章

数据类型检测的四种方式

/*typeof:检测数据类型的运算符 返回的都是一个字符串 类型:number string boolean undefined function object*/ console.log(typeof 12); console.log(typeof "14"); console.log(typeof undefined); console.log(typeof function text(){}); console.log(typeof null);//空对象指针 /*instan

数据类型检测的几种方式

1.typeof 缺点:对null和Array等类型的检测不是很方便 Js代码   1 typeof null; //"object" 2 typeof []; //"object" 2.instanceof 缺点:1.只适用于对象类型 2.只要当前的这个类在实例的原型链上,检测出来的结果都是true Js代码   123 instanceof Number; //false null instanceof null; //TypeError null instan

js创建对象的四种方式以及消耗时间比较

// Property-less object console.time('zoop1'); var zoop = (function (numObjects) { var pooz = Object.create(null); for(var i = 0; i< numObjects; i++) { pooz[i] = Object.create(null); } return pooz; })(1000000); console.timeEnd('zoop1'); // Using Obje

【Java EE 学习第80天】【调用WebService服务的四种方式】

不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jdk命令wsimport生成调用源代码 package com.kdyzm.ws; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class MyWsServer { public Strin

js动态引入的四种方式

index.html [html] view plaincopy <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta content="text/html;charset=utf-8" http-equiv=&qu

从零学习Fluter(八):Flutter的四种运行模式--Debug、Release、Profile和test以及命名规范

从零学习Fluter(八):Flutter的四种运行模式--Debug.Release.Profile和test以及命名规范 好几天没有跟新我的这个系列文章,一是因为这两天我又在之前的基础上,重新认识flutter,觉得flutter这个东西越来越有意思.并且水很深 今天简单分享一下开发学习中的小知识点 Flutter有四种运行模式:Debug.Release.Profile和test,这四种模式在build的时候是完全独立的 Debug ??Debug模式可以在真机和模拟器上同时运行:会打开所

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

struts2访问国际化消息的四种方式

Struts2的国际化是建立在java国际化的基础之上的,因此具有强大的国际互能力.Struts2运行时自动检测当前的 Location,然后使用RsourceBundle加载对应的Locale资源文件.因为Struts2对java的国际化进行了封装,因此国际化起来更简单,用户一般提供不同国家的消息资源即可.在Struts2的国际化包含三个部分:前台的国际化,Action中的国际化,验证配置文件的国际化. 在Struts2中加载全局资源文件 国际化的前提是如何让Struts2能够加载到国际化消息

Android中多线程的使用四种方式最全总结

当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中.当一个组件在启动的