js数据类型的判断

判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype,接下来主要比较一下这几种方法的异同

下面先准备几个例子:

var a = "iamstring.";
var b = 222;
var c= [1,2,3];
var d = new Date();var e = {a:1,b:2};
var f = function(){alert(111);};

1、常用的类型判断方法:typeof

console.log(typeof a)   ------------> string
console.log(typeof b)   ------------> number
console.log(typeof c)   ------------> object
console.log(typeof d)   ------------> object
console.log(typeof e)   ------------> object
console.log(typeof f)   ------------> function
其中typeof返回的类型都是字符串形式,需注意,例如:
alert(typeof a === "string") -------------> true
alert(typeof a == String) ---------------> false
另外typeof 可以判断function的类型,判断function类型时比较方便。

2、判断已知是对象类型的方法: instanceof

console.log(c instanceof Array) ---------------> true
console.log(d instanceof Date) ---------------> true
console.log(e instanceof Object) ------------> true
console.log(f instanceof Function) ------------> true
注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适用于typeof不能判断的部分引用数据类型的情况。

3、根据对象的constructor判断: constructor

alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Object) -------> true
alert(f.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;
      alert(aobj.constructor === Object) -----------> false;  //因为不是直接继承该类
而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
      alert(aobj instanceof A) ----------------> true;
      alert(aobj instanceof B) ----------------> true;
      alert(aobj instanceof Object) ----------------> true;
这种情况下,解决construtor的问题通常是让对象的constructor手动指向自己:
      aobj.constructor = A; //将自己的类赋值给对象的constructor属性
      alert(aobj.constructor === A) -----------> true;
      alert(aobj.constructor === B) -----------> false; //基类不会报true了;
      alert(aobj.constructor === Object) -----------> false; //基类不会报true了;
所以,实例的constructor属性为它直接继承的类或者手动设置的constructor属性所指向的类     

3、通用方法: prototype调用toString()方法

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 Object]’) -------> true;
alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
万能方法

总结:

通常情况下基本数据类型用typeof 判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法。

原文地址:https://www.cnblogs.com/leelam/p/9389849.html

时间: 2024-10-07 05:46:29

js数据类型的判断的相关文章

160304-02、JS 中如何判断null 和undefined

JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undefined;if (exp == undefined){    alert("undefined");} exp 为 null 时,也会得到与 undefined 相同的结果,虽然 null 和 undefined 不一样.注意:要同时判断 undefined 和 null 时可使用本法.

javascript数据类型的判断

最近看到了很多关于数据类型判断的方法,总结了下 一.javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型.原始数据类型有:string.number.boolean.undefined和null引用数据类型有:Function.Object.Date.RegExp.Number.String.Boolean和自定义类等 其中原始数据类型也称基础数据类型,是不可拆分的数据类型,他存在于栈中:而引用数据类型也是通常意义上所说的类,存在于堆中.这两者的一个重要的区别在于原始

JavaScript学习10 JS数据类型、强制类型转换和对象属性

JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以及String. Undefined数据类型的值只有一个:undefined. 在JavaScript中,如果函数没有声明返回值,那么会返回undefined.(后面有实例). 如果typeof后面跟一个未定义的参数,也是返回undefined. Null数据类型的值只有一个:null. null与

JS 中如何判断 undefined 和 null

JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 null 的判断,下面谈谈 undefined 的判断. 以下是不正确的用法: var exp = undefined;if (exp == undefined){    alert("undefined");} exp 为 null 时,也会得到与 undefined 相同的结果,虽然 null 和 undefined 不一样.注意:要同时判断 undefi

Javascript的基本数据类型和判断

  ECMAScript中有6种简单数据类型:Undefined,Null,Boolea,Number,String和Object,这些都是一些基本知识,有意思在后面 用javascript里的typeof检测一下这6个数据类型你会有新发现 "undefined"    ----------   如果值未定义                       Undefined "boolean"      ----------     如果这个值是布尔值        

总结的JS数据类型判定(非常全面)

用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用typeof 来检测对象类型都一律返回"object"并不能加以区分 typeof null // "object" typeof [] // "object" typeof document.childNodes //"object&qu

JS数据类型的理解(猜测)

Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系是什么? 2)typeof 和instanceof 的区别是什么和作用是什么? 3)undefined 和null 有什么区别? 4)js 有哪几种基本的数据类型? 5)Undefined,undefined,’undefined’分别是什么? 6)typeof null  ,null instan

JS数据类型 构造函数 原型链

js数据类型 基本数据类型:string   undefined   null  boolean  number 引用数据类型  Object  array  function 二者的区别 基本数据类型就是简单的操作值,引用数据类型,把引用地址赋值给变量 堆内存 就是存放代码块的,存放形式有两种,一种是对象以键值对的形式存放 另一种就是函数  以字符串的形式存放 案例 引用数据类型的赋值,是把引用地址赋给它,在修改属性的时候,通过地址查找然后改掉 应用数据类型,如何操作? 先通过引用地址去查找堆

1. js数据类型_对象_函数_内存

1. js数据类型有哪些? 基本(值)类型 Number ---- 任意数值 String ---- 任意字符串 Boolean ---- true/false undefined ---- undefined null -------- null 对象(引用)类型 Object Array Function 2. 判断数据类型的方法? typeof 不能检测 null object array 的区别 instanceof 能检测 object array function 的区别 3. 谈谈