`

javascript 数据类型判断

 
阅读更多

javascript 中判断数据类型有两种情况:1.基本数据类型 2.引用数据类型

 

1.基本数据类型:boolean,(object/null),string,number,undefined,function

判断方式:typeof

 

console.log(typeof 45)      //number 
console.log(typeof true)    //boolean
console.log(typeof alert)   //function
console.log(typeof {})      //object
console.log(typeof str)     //undefined
console.log(typeof "test") //string

 2.引用数据类型:Date,Array,RegExp等

console.log(/a/g instanceof RegExp ? "RegExp" : false);     //RegExp
console.log([1,2,3] instanceof Array ? "Array" : false);       //Array
console.log(new Date() instanceof Date ? "Date" : false);  //Date

 

如果是引用数据类型用typeof来检查就变成了下面的情况:

console.log(typeof /a/g );               //object
console.log(typeof [1,2,3] );           //object
console.log(typeof new Date());      //object

 反过来用instanceof来检查基本数据类型是什么情况呢?

console.log(23 instanceof Number);      //false
console.log(true instanceof Boolean);   //false
console.log(alert instanceof Function);  //true
console.log({} instanceof Object);       //true
console.log(str instanceof undefined); //报错
console.log("test" instanceof String);  //false

 

从结果看出,检查类型前,要先知道是基本数据类型,还是引用类型很重要。

于是在很多框架中出现了,isXXX这样的方法,用于类型判断,但研究源码发现,判断类型和上面的方式不一样。

   判断类型不用typeof、instanceof呢?看看下面的代码

console.log((23).toString());       //23
console.log((/2/).toString());     ///2/
console.log(({}).toString());     //[object Object]
console.log(alert.toString());   //函数源码
//console.log(str.toString());  //报错 str 未定义
console.log("test".toString()); //test

上面的代码中有一个很特别: [object Object],这是一个对象的toString方法,输出的结果与别的类型的toString方法不一样。如果其它类型也调用对象的toString方法会是什么样的结果呢?

console.log({}.toString.call(23));  //[object Number]
console.log({}.toString.call(/2/)); //[object RegExp]
console.log({}.toString.call({}));  //[object Object]
console.log({}.toString.call(alert)); //[object Function]
//console.log({}.toString.call(str));  //报错
console.log({}.toString.call("test")); //[object String]

 上面的输出是不是很有意义?看到这个结果,看以知道数据类型了。 其中{}.toString.call(23)(call起了关键作用,{}是一个字面量的写法。)简单理解就是让23调用对象的toString方法。

再看看几个例子:

 

console.log({}.toString.call([1,2,3]));  //[object Array]
console.log({}.toString.call(alert));    //[object Function]
console.log({}.toString.call(true));     //[object Boolean]

 

看了上面的输出他们都有一个共同点:[object .....]这样的形式。

 

我们如果要判断常用的数据类型,只要定义好映射关系。就能正确的得到数据类型了。

 

 

//定义关系
var types={
  "[object Number]":"Number",
  "[object Object]":"Object",
  "object Function]":"Function",
  "[object String]":"String",
  "[object Boolean]":"Boolean",
  
  "[object RegExp]":"RegExp",
  "[object Array]":"Array"
}


//类型判断调用函数
function type(para){
  return types[{}.toString.call(para)];
}

console.log(type(/a/));    //RegExp
console.log(type({}));     //Object
console.log(type(true));  //boolean
console.log(type([]));    //Array
console.log(type(12));   //Number

 上面能正确判断类型够用吗?

我们再利用{}.toString.call()输出几个结果。

console.log({}.toString.call(new Date()));   //[object Date]
console.log({}.toString.call(document));     //[object XULDocument]
console.log({}.toString.call(window));     //[object Window]

看看一个比较完整的判断:mass FrameWork GitHub

   var  class2type={
        "[objectHTMLDocument]":"Documnt",
        "[objectHTMLCollection]":"NodeList",
        "[objectStaticNodeList]":"NodeList",
        "[objectIXMLDOMNodeList]":"nodeList",
        "[objectDOMWindow]":"Window",
        "object gloabal":"Window",
        "null":"Null",
        "NaN":"NaN",
        "undefined":"Undefined"
    },
    toString  = class2type.toString;
    "Boolean,Number,String,Function,Array,Date,RegExp,Window,Document,Arguments,NodeList".replace(/[^,]+/g,function(name){
        class2type["[object "+ name +"]"] = name;
    });


var type = function(obj,str){
    var result = class2type[(obj == null || obj !==obj) ? obj : toString.call(obj)] || obj.nodeName || "#";

    if(result.charAt(0) ==="#"){//兼容旧式浏览器与处理个别情况,如window.opera
        //利用IE678 window == document为true,document == window竟然为false的神奇特性
        if(obj == obj.document && obj.document != obj){
            result ="Window";//返回构造器名字
        }else if(obj.nodeType === 9 ){
            result = "Document";//返回构造器名字
        }else if(obj.callee){
            result = "Arguments";//返回构造器名字
        }else if(isFinite(obj.length) && obj.item){
            result = "NodeList"; //处理节点集合
        }else{
            result = toString.call(obj).slice(8,-1);
        }
    }
    if(str){
        return str === result;
    }
    return result;
}

  

使用如下:

console.log(type(1));        //Number
console.log(type(document));  //Document
console.log(type(true));    //Boolean
console.log(type([],"Array")); //true

 

注意:

1.replace的用法。

2.null,undefined判断

3.个别浏览器的处理。

 

 

学习中.....

 

 

 

分享到:
评论

相关推荐

    javascript数据类型 -JavaScript优势简介及数据类型

    JavaScript提供了多种数据类型,包括基本和复合类型: 1. **基本数据类型**: - **数字(Numbers)**:整数和浮点数,如123,120.50。 - **字符串(Strings)**:文本字符序列,如"This text string",可以用单...

    JavaScript之数据类型

    本篇将深入探讨JavaScript中的数据类型,包括基本数据类型、引用数据类型以及ES6引入的新的数据类型。 1. **基本数据类型** JavaScript中的基本数据类型包括: - **Undefined**:表示变量未定义或值不存在。 - *...

    js的各种数据类型判断的介绍

    以下是关于JavaScript数据类型判断的一些关键知识点: 1. **`typeof` 操作符** `typeof` 是用于检测变量或表达式的数据类型的JavaScript操作符。它有两种用法:`typeof xxx` 和 `typeof(xxx)`。虽然它能提供大部分...

    1902钟文宇Javascript数据类型总结.docx

    在JavaScript中,数据类型分为两种主要类别:基本数据类型(也称为原始数据类型)和引用数据类型。 基本数据类型包括五种: 1. **String**:字符串类型,用于存储文本信息。字符串是由一个或多个字符组成的序列,...

    详解JavaScript数据类型和判断方法

    在深入探讨JavaScript数据类型和判断方法...为了确保数据类型判断的准确性,通常会结合使用多种方法。在实际开发中,选择合适的方法来判断数据类型是十分重要的,它有助于我们更好地理解和操作JavaScript中的各种数据。

    javascript常用判断函数

    本文将详细讲解JavaScript中的几个常见判断函数,这些函数可以帮助开发者进行数据类型的检查和验证。 首先,我们来看`DataLength`函数。这个函数的主要功能是计算字符串的长度,但与JavaScript原生的`length`属性...

    Javascript如何判断数据类型和数组类型

    在JavaScript中,我们经常需要判断数据类型,以便采取不同的操作或进行错误处理。JavaScript有六种原始数据类型,分别是number、string、boolean、null、undefined和object。number类型包括整数和浮点数;string类型...

    JavaScript常用判断函数

    在JavaScript编程中,判断函数是非常重要的工具,可以帮助开发者快速地对各种数据类型进行验证和处理。本文将详细介绍几个常用的JavaScript判断函数,包括`DataLength`(计算数据长度)、`IsEmpty`(判断是否为空)...

    对象数据类型判断.js

    一个可以直接使用的判断数据类型的js文件,里面整理了比较全面的判断各种数据类型分方法,前端的小伙伴看过来

    JavaScript 判断数据类型的4种方法

    总结来说,对于JavaScript中的数据类型判断,`typeof` 简单快捷,但不适用于所有情况;`instanceof` 能判断实例类型,但不适用于基本类型;`constructor` 属性可能不稳定;而 `Object.prototype.toString.call()` 是...

    JavaScript的数据类型.pdf

    JavaScript是一种广泛用于网页和网络应用的编程语言,其核心特性之一就是它的动态数据类型。在JavaScript中,数据类型包括数值、逻辑值、字符串值、空值、未定义值以及对象等。下面我们将深入探讨这些数据类型及其...

    头歌教学实践平台 Web前端开发基础 JavaScript 学习手册二:JS 数据类型

    本教程“头歌教学实践平台 Web前端开发基础 JavaScript 学习手册二:JS 数据类型”深入浅出地介绍了JavaScript中的各种数据类型,这对于理解代码逻辑和优化性能至关重要。 在JavaScript中,数据类型主要分为两大类...

    JavaScript判断数据类型有几种方法及区别介绍

    在JavaScript中,正确地识别和判断变量的数据类型是编程中不可或缺的一部分。本文将详细介绍JavaScript中判断数据类型的五种主要方法,以及它们之间的区别。 一、`typeof`操作符 `typeof`是一个操作符,用于判断...

    javascript基本数据结构

    JavaScript拥有四种基本数据类型: 1. 数值(Number):包括整数和浮点数,例如123、3.14。 2. 字符串(String):由单引号或双引号包围的一串字符,例如`"Hello, world"`。 3. 布尔(Boolean):只有两个值,`true`...

    JavaScript基本数据类型及值类型和引用类型

    通过`typeof`操作符可以判断变量的数据类型,它会返回相应的字符串表示,如`typeof "hello"`会返回`"string"`。 此外,JavaScript有一个复杂数据类型:Object。所有对象,包括数组、函数等,都是Object类型。函数在...

    JS数据类型判断的几种常用方法

    JavaScript中的数据类型判断是编程中常见的操作,尤其是在处理复杂逻辑时。本文将详细介绍几种常用的JS数据类型判断方法。 首先,`typeof`运算符是最常用的数据类型判断方式。它可以直接通过`typeof(表达式)`或`...

    教案JavaScript的数据类型.pdf

    JavaScript是一种广泛应用于网页和网络应用的编程语言,其核心特性之一就是它的动态数据类型。在JavaScript中,数据类型包括数值、逻辑值、字符串值、空值、未定义值,以及对象等。下面是这些数据类型的详细解释: ...

    关于JavaScript的变量的数据类型的判断方法

    总的来说,JavaScript的变量类型判断主要依赖typeof操作符,它能够帮助开发者理解变量的基本数据类型。对于数组的特别情况,推荐使用Object.prototype.toString方法来准确判断。开发者在编程时应当充分了解这些基本...

Global site tag (gtag.js) - Google Analytics