JavaScript中,与判断变量的类型相关的,有2个运算符:typeof、instanceof,和一个属性constructor。
通过一个测试的例子来说明。使用Boolean、String、Array和一个自己先创建的类,代码如下所示:
<script language="Javascript">
var myBool = new Boolean(); document.write("Boolean.constructor = " + Boolean.constructor + ".<BR>"); document.write("Boolean.constructor() = " + Boolean.constructor() + ".<BR>"); document.write("myBool.constructor = " + myBool.constructor + ".<BR>"); document.write("myBool.constructor() = " + myBool.constructor() + ".<BR>"); if(typeof(myBool) == Boolean){ document.write("typeof(myBool) = <B>Boolean</B>.<BR>"); } else{ document.write("typeof(myBool) = <B>" + typeof(myBool) +"</B><BR>"); } if(myBool instanceof Boolean){ document.write("myBool is a instance of <B>Boolean</B>.<BR><BR>"); } else if(myBool instanceof [Object]){ document.write("myBool is a instance of <B>Object</B>.<BR><BR>"); }
var myStr = new String("Hello,Shirdrn!!!"); document.write("String.constructor = " + String.constructor + ".<BR>"); document.write("String.constructor() = " + String.constructor() + ".<BR>"); document.write("String.constructor = " + String.constructor + ".<BR>"); document.write("String.constructor() = " + String.constructor() + ".<BR>"); if(myStr.constructor() == String){ var sc = myStr.constructor(); if(sc == ""){ document.write("myStr.constructor() = \"\".<BR>"); } } if(typeof(myStr) == String){ document.write("typeof(myStr) = String.<BR>"); } else{ document.write("typeof(myStr) = <B>" + typeof(myStr) +"</B><BR>"); } if(myStr instanceof String){ document.write("myStr is a instance of <B>String</B>.<BR><BR>"); } else if(myArray instanceof Object){ document.write("myStr is a instance of <B>Object</B>.<BR><BR>"); }
var myArray = ["姓名:Shirdrn","年龄:26","Email:shirdrn@hotmail.com"]; document.write("Array.constructor = " + Array.constructor + ".<BR>"); document.write("Array.constructor() = " + Array.constructor() + ".<BR>"); document.write("myArray.constructor = " + myArray.constructor + ".<BR>"); document.write("myArray.constructor() = " + myArray.constructor() + ".<BR>"); if(typeof(myArray) == Array){ document.write("typeof(myArray) = <B>Array</B>.<BR>"); } else{ document.write("typeof(myArray) = <B>" + typeof(myArray) +"</B><BR>"); } if(myArray instanceof Array){ document.write("myArray is a instance of <B>Array</B>.<BR><BR>"); } else if(myArray instanceof Object){ document.write("myArray is a instance of <B>Object</B>.<BR><BR>"); }
function Building(){ var cost = 0; this.setCost = function(c){ cost = c; }; this.getCost = function(){ return cost; }; }; Building.prototype.located = ""; Building.prototype.projectTeam = "山东第一建筑团队"; Building.prototype.style = "European Style"; Building.prototype.planning = function(){ var pre = "2月1日:建筑工程全面启动。<BR>"; pre += "2月1日~11月30日:工程建筑时期。<BR>"; pre += "11月30日~12月31日:工程检测时期。<BR>"; pre += "1月1日:完美竣工。<BR>"; return pre; };
var myBuilding = new Building(); document.write("Building.constructor = " + Building.constructor + ".<BR>"); document.write("Building.constructor() = " + Building.constructor() + ".<BR>"); document.write("myBuilding.constructor = " + myBuilding.constructor + ".<BR>"); document.write("myBuilding.constructor() = " + myBuilding.constructor() + ".<BR>"); if(typeof(myBuilding) == Building){ document.write("typeof(myBuilding) = <B>Building.<BR><BR>"); } else{ document.write("typeof(myBuilding) = <B>" + typeof(myBuilding) +"</B><BR>"); } if(myBuilding instanceof Building){ document.write("myBuilding is a instance of <B>Building</B>.<BR><BR>"); } else if(myBuilding instanceof Object){ document.write("myBuilding is a instance of <B>Object</B>.<BR><BR>"); }
</script>
|
运行结果如下所示:
Boolean.constructor = function Function() { [native code] } . Boolean.constructor() = function anonymous() { }. myBool.constructor = function Boolean() { [native code] } . myBool.constructor() = false. typeof(myBool) = object myBool is a instance of Boolean.
String.constructor = function Function() { [native code] } . String.constructor() = function anonymous() { }. myStr.constructor = function String() { [native code] } . myStr.constructor() = . typeof(myStr) = object myStr is a instance of String.
Array.constructor = function Function() { [native code] } . Array.constructor() = function anonymous() { }. myArray.constructor = function Array() { [native code] } . myArray.constructor() = . typeof(myArray) = object myArray is a instance of Array.
Building.constructor = function Function() { [native code] } . Building.constructor() = function anonymous() { }. myBuilding.constructor = function Building(){ var cost = 0; this.setCost = function(c){ cost = c; } this.getCost = function(){ return cost; } }. myBuilding.constructor() = undefined. typeof(myBuilding) = object myBuilding is a instance of Building.
|
通过程序及其运行结果可以得到如下结论:
JavaScript的类的constructor属性通过测试都是如下形式的:
function Function() { [native code] } . |
而一个类的constructor方法是如下形式的:
function anonymous() { }. |
一个类的对象实例的constructor属性,对于JavaScript内部类是如下这样:
function Array() { [native code] } . |
但是对于我们自己创建的JavaScript类,它会得到我们在类的构造函数中设置的内容,如Building类的一个对象实例myBuilding的constructor属性如下所示:
function Building(){ var cost = 0; this.setCost = function(c){ cost = c; }; this.getCost = function(){ return cost; }; }. |
对于类的对象实例的constructor方法(即constructor()),JavaScript内部类的对象实例都有自己的默认值,比如Boolean的对象实例的是的constructor()值为false,而String的对象实例的是的constructor()值为"",Array的对象实例的是的constructor()值为"";但是对于我们自己创建的类就是undefined的。
分享到:
相关推荐
本文将深入探讨四种常用的方法来识别和判断JavaScript中的数据类型:`typeof`、`instanceof`、`constructor`以及`prototype`。 ### 1. `typeof` `typeof`操作符是最常见的类型检测方式之一,它返回一个表示未经计算...
使用方法如下:object instanceof constructor,object 为实例对象,constructor 为构造函数。 例如: let Car = function() {} let benz = new Car() benz instanceof Car // true let car = new String('xxx') ...
在JavaScript中,`typeof`和`instanceof`是两种常用的类型检查操作符,它们各自有着不同的用法和特点。理解这两者之间的差异对于编写健壮的JavaScript代码至关重要。 `typeof`操作符主要用于检测变量的数据类型。它...
避免使用`for in`循环遍历数组,采用经典`for`循环并缓存`length`,明确理解`Array`构造函数的行为,以及正确使用`typeof`和`instanceOf`进行类型检查,这些都是编写高质量JavaScript代码的关键。
`typeof`、`instanceof`和`constructor`是JavaScript中三种常见的用于判断对象类型的工具。下面将详细阐述它们的联系、区别以及应用场景。 `typeof`操作符: `typeof`主要用于检测一个值的数据类型,返回的是一个...
在JavaScript编程语言中,`instanceof` 和 `typeof` 是两个非常重要的操作符,用于判断变量的类型。它们各自有着不同的用途和用法,对于理解和调试代码至关重要。 首先,我们来详细了解一下`instanceof`操作符。`...
对于数据类型的判断,JavaScript提供了typeof和instanceof两个操作符。这两个操作符是检测数据类型的常用方法,但它们各自存在一定的局限性。本文将通过分析这两个操作符的使用场景与局限性,探讨如何进行优化,以...
`typeof` 和 `instanceof` 是两种常用的检测数据类型的方法,它们各有特点和适用场景。接下来我们将深入探讨这两个操作符的工作原理及其用法。 首先,`typeof` 操作符是一个在JavaScript中用于检测变量或表达式的...
它的语法是`object instanceof Constructor`。如果对象是通过给定构造函数创建的,或者其原型链中包含了构造函数的 prototype,那么结果为`true`。 ```javascript let arr = []; arr instanceof Array; // true ```...
它的语法是 `object instanceof Constructor`,如果对象是Constructor构造函数创建的,那么结果为true。例如: ```javascript function Person(name) { this.name = name; } let person = new Person("Alice"); ...
6. **替代方案**:除了`instanceof`,还有其他方法可以用来检查对象类型,如`Object.prototype.toString.call()`,它返回表示对象类型的字符串,或者使用`typeof`来检测基本类型。 在面试中,面试官可能会提出关于`...
它的语法结构是`object instanceof constructor`。例如,如果`obj`是`Person`构造函数的一个实例,`obj instanceof Person`将返回`true`。`instanceof`不仅能识别自定义对象,还可以识别内置对象,如数组、日期、...
JS中判断数据类型的4种方法及其实例:typeof、instanceof、constructor、Object.prototype.toString.call();还有判断数据类型的函数
在JavaScript编程中,`typeof`操作符是我们用来检测变量类型的常用工具。然而,它并不总是提供最精确的信息,尤其是在处理对象类型时。标题"一个更明确的typeof改善"暗示了我们要探讨如何改进`typeof`检查,以获得更...
`instanceof`的基本语法是`objectInstance instanceof Constructor`,其中`objectInstance`是待检查的对象,`Constructor`是构造函数。如果`objectInstance`的原型链上存在`Constructor.prototype`,那么`instanceof...
`instanceOf`的使用语法是 `object instanceOf constructor`,其中`object`是你要检查的对象,`constructor`是你要验证的构造函数。如果`object`是由`constructor`创建的,或者`object`的原型链上存在`constructor....
然而,由于其局限性,有时还需要结合其他检查方法,如`instanceof`或`constructor`属性,以获取更精确的类型信息。在实际编程中,了解这些细节可以帮助我们避免类型相关的错误,提高代码的可读性和可维护性。
`instanceof`的基本语法是:`variable instanceof Constructor`,其中`variable`是要检查的对象,`Constructor`是构造函数。如果`variable`是`Constructor`的实例或者是`Constructor`原型链上的某个对象的实例,那么...