如何判断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;
}
分享到:
相关推荐
本文将深入探讨四种常用的方法来识别和判断JavaScript中的数据类型:`typeof`、`instanceof`、`constructor`以及`prototype`。 ### 1. `typeof` `typeof`操作符是最常见的类型检测方式之一,它返回一个表示未经计算...
在JavaScript编程语言中,`instanceof` 和 `typeof` 是两个非常重要的操作符,用于判断变量的类型。它们各自有着不同的用途和用法,对于理解和调试代码至关重要。 首先,我们来详细了解一下`instanceof`操作符。`...
在前端开发中, typeof 和 instanceof 是两种常用的判断数据类型的方法,下面我们将详细介绍这两种方法的使用方法、区别和实现原理。 一、typeof 操作符 typeof 操作符返回一个字符串,表示未经计算的操作数的类型...
JS中判断数据类型的4种方法及其实例:typeof、instanceof、constructor、Object.prototype.toString.call();还有判断数据类型的函数
在JavaScript中,`typeof`和`instanceof`是两种常用的类型检查操作符,它们各自有着不同的用法和特点。理解这两者之间的差异对于编写健壮的JavaScript代码至关重要。 `typeof`操作符主要用于检测变量的数据类型。它...
JavaScript中如何检测数据类型?有四种检测的方式: typeof:检测数据类型的运算符 instanceof : 检测某个实例是否属于这个类(什么是类) constructor: 获取当前实例的构造器 Object.prototype.toString.call :...
`typeof` 是JavaScript中最直接的数据类型检测方法。它会返回一个字符串,表示变量的数据类型。例如: ```javascript typeof "hello" === "string"; // true typeof 42 === "number"; // true ``` 特殊情况要...
在实际编程中,通常会结合使用`typeof`和`instanceof`来更精确地判断数据类型。例如,对于数组的检测,可以先用`typeof`排除非对象,然后用`instanceof`确认是否为数组: ```javascript function isArray(value) { ...
6. **替代方案**:除了`instanceof`,还有其他方法可以用来检查对象类型,如`Object.prototype.toString.call()`,它返回表示对象类型的字符串,或者使用`typeof`来检测基本类型。 在面试中,面试官可能会提出关于`...
对于数据类型的判断,JavaScript提供了typeof和instanceof两个操作符。这两个操作符是检测数据类型的常用方法,但它们各自存在一定的局限性。本文将通过分析这两个操作符的使用场景与局限性,探讨如何进行优化,以...
本文将详细介绍并比较五种常见的判断JavaScript数据类型的方法:`typeof`、`instanceof`、`constructor`、`prototype`以及jQuery提供的`$.type()`/`jquery.type()`。 1. `typeof`: `typeof`操作符用于获取变量的...
* Object.prototype.toString.call():使用Object对象的原型方法toString来判断数据类型。 3. null和undefined的区别 * undefined:代表的含义是未定义,主要用于变量声明了但还没有定义的时候。 * null:代表的...
2. **`Object.prototype.toString.call()`**:这个方法可以获取一个对象的内部表示,通过比较返回的字符串来判断数据类型。例如: ```javascript console.log(Object.prototype.toString.call([])); // "[object ...
在 JavaScript 中,有多种方式来检测数据类型,包括 typeof、instanceof、constructor 和 Object.prototype.toString.call()。其中 typeof 可以用于检测基本数据类型,但对于数组、对象和 null,它们都会被判断为 ...
判断数据类型有多种方法,包括typeof、instanceof、constructor、Object.prototype.toString.call()等。 typeof 是一种简单的判断数据类型的方法,但它有缺点,例如typeof null 的值为 Object,无法分辨是 null ...
本文将详细介绍JavaScript中判断数据类型的五种主要方法,以及它们之间的区别。 一、`typeof`操作符 `typeof`是一个操作符,用于判断变量的基础数据类型。它会返回以下几种值: - number - string - boolean - ...
在JavaScript和jQuery中,准确地判断数据类型是开发过程中必不可少的技能。这里将详细介绍四种常见的判断数据类型的方法,并通过示例代码展示其用法。 1. `typeof` 运算符: `typeof` 是JavaScript中的一个关键字...
本篇文章将深入探讨如何在JavaScript中判断数据类型,并通过提供的`main.js`文件中的代码示例进行解析。 首先,JavaScript有七种基本数据类型:`Undefined`、`Null`、`Boolean`、`Number`、`BigInt`、`String` 和 `...
typeof操作符用于判断数据类型,但需要注意,null的typeof返回"object",而null和undefined相等(==)但不全等(!==)。 2. 基本数据类型和引用数据类型的差异: - 参数传递:基本数据类型传递的是值的副本,修改...
在js中,有四种用于检测数据类型的方式,分别是: typeof 用来检测数据类型的运算符 instanceof 检测一个实例是否属于某个类 constructor 构造函数 Object.prototype.toString.call() 原型链上的Object对象的...