`
逝去的梦
  • 浏览: 15360 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较

    博客分类:
  • js
阅读更多
如何判断js中的类型呢,先举几个例子:
var a = "iamstring.";
var b = 222;
var c= [1,2,3];
var d = new Date();
var e = function(){alert(111);};
var f = function(){this.name="22";};


最常见的判断方法:typeof
alert(typeof a)   ------------> string
alert(typeof b)   ------------> number
alert(typeof c)   ------------> object
alert(typeof d)   ------------> object
alert(typeof e)   ------------> function
alert(typeof f)   ------------> function

其中typeof返回的类型都是字符串形式,需注意,例如:
alert(typeof a == "string") -------------> true
alert(typeof a == String) ---------------> false

另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。

判断已知对象类型的方法: instanceof
alert(c instanceof Array) ---------------> true
alert(d instanceof Date) 
alert(f instanceof Function) ------------> true
alert(f instanceof function) ------------> false

注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

根据对象的constructor判断: constructor
alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true

注意: constructor 在类继承时会出错
eg,
     
function A(){};
      function B(){};
      A.prototype = new B(); //A继承自B
      var aObj = new A();
      alert(aobj.constructor === B) -----------> true;
      alert(aobj.constructor === A) -----------> false;

而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
     
alert(aobj instanceof B) ----------------> true;
      alert(aobj instanceof B) ----------------> true;

言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
     
aobj.constructor = A; //将自己的类赋值给对象的constructor属性
      alert(aobj.constructor === A) -----------> true;
      alert(aobj.constructor === B) -----------> false; //基类不会报true了;


通用但很繁琐的方法: prototype
alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;

大小写不能写错,比较麻烦,但胜在通用。
通常情况下用typeof 判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,简单总结下,挖个坑,欢迎补充!

例子: 复制对象
function cloneObject(fromObj) {
    var newObj;
    switch(typeof fromObj) {
        case 'undefined' : break;
        case 'string' : newObj = fromObj+'';break;
        case 'number' : newObj = fromObj+0;break;
        case 'boolean' : newObj = fromObj;break;
        case 'object' : 
            if(fromObj === null) {
                newObj = null;
            } else {
                if(fromObj instanceof Array) {
                    newObj = [];
                    for(var i = 0, len = fromObj.length; i < len;i++) {
                        newObj.push(cloneObject(fromObj[i]));
                    }
                } else {
                    newObj = {};
                    for(var k in fromObj) {
                        newObj[K] = cloneObject(fromObj[k]);
                    }
                }
            }
            break;
        default : newObj = fromObj;break;
    }
    return newObj;
}
分享到:
评论

相关推荐

    JS:typeof instanceof constructor prototype区别

    本文将深入探讨四种常用的方法来识别和判断JavaScript中的数据类型:`typeof`、`instanceof`、`constructor`以及`prototype`。 ### 1. `typeof` `typeof`操作符是最常见的类型检测方式之一,它返回一个表示未经计算...

    instanceof 判断引用类型,typeof判断基本类型。

    在JavaScript编程语言中,`instanceof` 和 `typeof` 是两个非常重要的操作符,用于判断变量的类型。它们各自有着不同的用途和用法,对于理解和调试代码至关重要。 首先,我们来详细了解一下`instanceof`操作符。`...

    前端大厂最新面试题-typeof_instanceof.docx

    在前端开发中, typeof 和 instanceof 是两种常用的判断数据类型的方法,下面我们将详细介绍这两种方法的使用方法、区别和实现原理。 一、typeof 操作符 typeof 操作符返回一个字符串,表示未经计算的操作数的类型...

    判断数据类型的方法.html

    JS中判断数据类型的4种方法及其实例:typeof、instanceof、constructor、Object.prototype.toString.call();还有判断数据类型的函数

    JS中typeof与instanceof之间的区别总结.docx

    在JavaScript中,`typeof`和`instanceof`是两种常用的类型检查操作符,它们各自有着不同的用法和特点。理解这两者之间的差异对于编写健壮的JavaScript代码至关重要。 `typeof`操作符主要用于检测变量的数据类型。它...

    JS数据类型检测

    JavaScript中如何检测数据类型?有四种检测的方式: typeof:检测数据类型的运算符 instanceof : 检测某个实例是否属于这个类(什么是类) constructor: 获取当前实例的构造器 Object.prototype.toString.call :...

    js中检测数据类型的方法总结1

    `typeof` 是JavaScript中最直接的数据类型检测方法。它会返回一个字符串,表示变量的数据类型。例如: ```javascript typeof "hello" === "string"; // true typeof 42 === "number"; // true ``` 特殊情况要...

    js代码-js数据类型判断(typeof、instanceof)

    在实际编程中,通常会结合使用`typeof`和`instanceof`来更精确地判断数据类型。例如,对于数组的检测,可以先用`typeof`排除非对象,然后用`instanceof`确认是否为数组: ```javascript function isArray(value) { ...

    前端面试题之baseJS-instanceof.zip

    6. **替代方案**:除了`instanceof`,还有其他方法可以用来检查对象类型,如`Object.prototype.toString.call()`,它返回表示对象类型的字符串,或者使用`typeof`来检测基本类型。 在面试中,面试官可能会提出关于`...

    JavaScript类型检测之typeof 和 instanceof 的缺陷与优化

    对于数据类型的判断,JavaScript提供了typeof和instanceof两个操作符。这两个操作符是检测数据类型的常用方法,但它们各自存在一定的局限性。本文将通过分析这两个操作符的使用场景与局限性,探讨如何进行优化,以...

    js 判断数据类型的几种方法

    本文将详细介绍并比较五种常见的判断JavaScript数据类型的方法:`typeof`、`instanceof`、`constructor`、`prototype`以及jQuery提供的`$.type()`/`jquery.type()`。 1. `typeof`: `typeof`操作符用于获取变量的...

    2022大厂前端面试题精选.pdf

    * Object.prototype.toString.call():使用Object对象的原型方法toString来判断数据类型。 3. null和undefined的区别 * undefined:代表的含义是未定义,主要用于变量声明了但还没有定义的时候。 * null:代表的...

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

    2. **`Object.prototype.toString.call()`**:这个方法可以获取一个对象的内部表示,通过比较返回的字符串来判断数据类型。例如: ```javascript console.log(Object.prototype.toString.call([])); // "[object ...

    2023前端面试八股文.pdf

    在 JavaScript 中,有多种方式来检测数据类型,包括 typeof、instanceof、constructor 和 Object.prototype.toString.call()。其中 typeof 可以用于检测基本数据类型,但对于数组、对象和 null,它们都会被判断为 ...

    面试题2021.pdf

    判断数据类型有多种方法,包括typeof、instanceof、constructor、Object.prototype.toString.call()等。 typeof 是一种简单的判断数据类型的方法,但它有缺点,例如typeof null 的值为 Object,无法分辨是 null ...

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

    本文将详细介绍JavaScript中判断数据类型的五种主要方法,以及它们之间的区别。 一、`typeof`操作符 `typeof`是一个操作符,用于判断变量的基础数据类型。它会返回以下几种值: - number - string - boolean - ...

    js和jquery判断数据类型的4种方法总结

    在JavaScript和jQuery中,准确地判断数据类型是开发过程中必不可少的技能。这里将详细介绍四种常见的判断数据类型的方法,并通过示例代码展示其用法。 1. `typeof` 运算符: `typeof` 是JavaScript中的一个关键字...

    js代码-实现一个函数判断数据类型

    本篇文章将深入探讨如何在JavaScript中判断数据类型,并通过提供的`main.js`文件中的代码示例进行解析。 首先,JavaScript有七种基本数据类型:`Undefined`、`Null`、`Boolean`、`Number`、`BigInt`、`String` 和 `...

    JavaScript 24道面试题和答案.docx

    typeof操作符用于判断数据类型,但需要注意,null的typeof返回"object",而null和undefined相等(==)但不全等(!==)。 2. 基本数据类型和引用数据类型的差异: - 参数传递:基本数据类型传递的是值的副本,修改...

    js数据类型检测总结

    在js中,有四种用于检测数据类型的方式,分别是: typeof 用来检测数据类型的运算符 instanceof 检测一个实例是否属于某个类 constructor 构造函数 Object.prototype.toString.call() 原型链上的Object对象的...

Global site tag (gtag.js) - Google Analytics