`
hansha2
  • 浏览: 35910 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

typeof instanceof constructor

阅读更多

 

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的。

 

 

 

分享到:
评论

相关推荐

    JS:typeof instanceof constructor prototype区别

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

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

    使用方法如下:object instanceof constructor,object 为实例对象,constructor 为构造函数。 例如: let Car = function() {} let benz = new Car() benz instanceof Car // true let car = new String('xxx') ...

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

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

    Array, Array Constructor, for in loop, typeof, instanceOf

    避免使用`for in`循环遍历数组,采用经典`for`循环并缓存`length`,明确理解`Array`构造函数的行为,以及正确使用`typeof`和`instanceOf`进行类型检查,这些都是编写高质量JavaScript代码的关键。

    typeof、instanceof、constructor 的联系、区别、应用场景(js 类型判断)

    `typeof`、`instanceof`和`constructor`是JavaScript中三种常见的用于判断对象类型的工具。下面将详细阐述它们的联系、区别以及应用场景。 `typeof`操作符: `typeof`主要用于检测一个值的数据类型,返回的是一个...

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

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

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

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

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

    `typeof` 和 `instanceof` 是两种常用的检测数据类型的方法,它们各有特点和适用场景。接下来我们将深入探讨这两个操作符的工作原理及其用法。 首先,`typeof` 操作符是一个在JavaScript中用于检测变量或表达式的...

    谈谈我对JavaScript中typeof和instanceof的深入理解

    它的语法是`object instanceof Constructor`。如果对象是通过给定构造函数创建的,或者其原型链中包含了构造函数的 prototype,那么结果为`true`。 ```javascript let arr = []; arr instanceof Array; // true ```...

    js代码-typeof && instanceof

    它的语法是 `object instanceof Constructor`,如果对象是Constructor构造函数创建的,那么结果为true。例如: ```javascript function Person(name) { this.name = name; } let person = new Person("Alice"); ...

    前端面试题之baseJS-instanceof.zip

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

    JavaScript中instanceof与typeof运算符的用法及区别详细解析

    它的语法结构是`object instanceof constructor`。例如,如果`obj`是`Person`构造函数的一个实例,`obj instanceof Person`将返回`true`。`instanceof`不仅能识别自定义对象,还可以识别内置对象,如数组、日期、...

    判断数据类型的方法.html

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

    一个更明确的typeof改善

    在JavaScript编程中,`typeof`操作符是我们用来检测变量类型的常用工具。然而,它并不总是提供最精确的信息,尤其是在处理对象类型时。标题"一个更明确的typeof改善"暗示了我们要探讨如何改进`typeof`检查,以获得更...

    实例讲解JavaScript中instanceof运算符的用法

    `instanceof`的基本语法是`objectInstance instanceof Constructor`,其中`objectInstance`是待检查的对象,`Constructor`是构造函数。如果`objectInstance`的原型链上存在`Constructor.prototype`,那么`instanceof...

    js代码-手写instanceOf

    `instanceOf`的使用语法是 `object instanceOf constructor`,其中`object`是你要检查的对象,`constructor`是你要验证的构造函数。如果`object`是由`constructor`创建的,或者`object`的原型链上存在`constructor....

    【JavaScript源代码】一篇文章弄懂js中的typeof用法.docx

    然而,由于其局限性,有时还需要结合其他检查方法,如`instanceof`或`constructor`属性,以获取更精确的类型信息。在实际编程中,了解这些细节可以帮助我们避免类型相关的错误,提高代码的可读性和可维护性。

    深入剖析JavaScript instanceof 运算符

    `instanceof`的基本语法是:`variable instanceof Constructor`,其中`variable`是要检查的对象,`Constructor`是构造函数。如果`variable`是`Constructor`的实例或者是`Constructor`原型链上的某个对象的实例,那么...

Global site tag (gtag.js) - Google Analytics