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

JS对象类型的确定

阅读更多
JS是松散类型的语言,这一点JS的对象表现得尤为突出。那么如何来确定JS对象的具体类型呢?

首先,我们可以使用typeof运算符确定其基本类型(number,object,function,undefined)。如果typeof运算符返回object我们再使用instanceof来确定该对象是否属于某个具体类型。

注意:typeof null得到object,而typeof undefined得到undefined,typeof 数组对象得到object,typeof 函数得到function。

o instanceof Type:判断对象o是否属于Type类型,如果o是Type类型子类的实例,同样满足。比如
var o=[];
alert(o instanceof Array);//true
alert(o instanceof Object);//true
var f=function(){}
alert(f instanceof Function);//true
alert(f instanceof Object);//true


如果要判断一个对象是否为某个具体类(子类)的实例,可以看该对象的constructor属性。
var d=new Date();
alert(d instanceof Object);//true
alert(d.constructor==Object);//false
alert(d.constructor==Date);//true


使用instanceof和constructor进行类型判断的缺点就是:你只能根据已经知道的类进行测试对象,而无法检查位置的对象。Object定义的默认的toString()方法的一个有趣现象在于它会揭示关于对象类型的信息。ECMAScript规范要求这个默认的toString()方法总是返回形式如下的一个字符串:
[object class]
class是对象的内部类型,通常和该对象的构造函数的名字相对应。例如,数组对象的class是Array,函数的class是Function,Date对象的class是Date,Math对象的class是Math。对于用户自定义的类型,class是Object,客户端的JS对象的class可能是Window、Document、Form等……

但是大多数类覆盖掉了默认的toString方法,需要Object.prototype中显示的调用默认函数,并且使用apply()所感兴趣的对象上调用:
Object.prototype.toString.apply(o);
        var d=new Date();
    	alert(Object.prototype.toString.apply(d));//[object Date]
    	var a=[];
    	alert(Object.prototype.toString.apply(a));//[object Array]


用于获得对象类型的工具方法
function getType(x){
	if(x==null){
		return "null";
	}
	var t= typeof x;
	if(t!="object"){
		return t;
	}
	var c=Object.prototype.toString.apply(x);
	c=c.substring(8,c.length-1);
	if(c!="Object"){
		return c;
	}
	if(x.constructor==Object){
		return c
	}
	if("classname" in x.prototype.constructor
			&& typeof x.prototype.constructor.classname=="string"){
		return x.constructor.prototype.classname;
	}
	return "<unknown type>";
}




分享到:
评论
1 楼 yanhaijing 2015-01-18  
if("classname" in x.prototype.constructor 
            && typeof x.prototype.constructor.classname=="string"){ 
        return x.constructor.prototype.classname; 
    }
这个代码有误吧

相关推荐

    Javascript面向对象编程.

    同一个方法在不同对象上调用可能会有不同的行为,这是通过原型链和运行时确定对象类型实现的。 在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能...

    js对象属性大全下载

    ### JavaScript对象属性详解 在深入探讨JavaScript对象属性之前,我们首先需要理解JavaScript是一种广泛应用于网页开发的编程语言,它能够使网页变得动态、交互性更强。JavaScript中的对象是其核心特性之一,几乎...

    JavaScript中判断对象类型的几种方法总结

    每个JavaScript对象都有一个`constructor`属性,它指向创建该对象的构造函数。这可以用来判断未知对象的类型。例如,通过比较`arr.constructor === Array`,可以确定`arr`是否为数组。然而,`constructor`属性在...

    javascript本地对象_内置对象和宿主对象

    相反,它采用晚绑定,这意味着在运行时才能确定对象的类型。这允许在运行时检查对象是否支持特定的特性或方法,而无需事先知道其类型。 本地对象(Native Objects)是ECMAScript标准定义的,独立于宿主环境(如...

    javascript对象大全

    ### JavaScript对象大全详解 #### 一、JavaScript简介 JavaScript 是一种强大的、解释型的脚本语言,由 Netscape 公司开发,最初被命名为 LiveScript。随着 Web 技术的发展,JavaScript 成为了网页开发中不可或缺...

    js校验对象参数说明表

    - 确定预期参数:定义函数或方法需要的参数及其类型。 - 编写验证逻辑:针对每个参数编写相应的验证条件。 - 执行验证:在函数入口处调用验证逻辑,如果验证失败,抛出错误或返回错误信息。 4. **对象参数的常见...

    JavaScript面向对象编程

    JavaScript面向对象编程是一种基于原型(Prototype)的编程范式,它是动态类型语言,允许开发者创建具有复杂特性的对象。在JavaScript中,面向对象主要通过构造函数、原型链和闭包来实现。以下是对这一主题的详细...

    js高级对象

    alert用于显示警告消息,confirm用于显示带有“确定”和“取消”按钮的确认框,prompt则可以显示一个让用户输入信息的对话框。 3. 模拟浏览器操作:window对象还允许开发者模拟浏览器的导航行为,如back()、forward...

    JavaScript 类型检查库 types.js.zip

    JavaScript 类型检查库 types.js.zip 包含了一个名为 TypesJS 的工具,这是一个专门用于JavaScript对象类型检测的库。在JavaScript这种动态类型的编程语言中,类型检查尤为重要,因为变量的类型可以在运行时改变,这...

    第15章 javascript面向对象与原型

    虽然工厂模式解决了重复代码的问题,但它也有一个缺陷,就是无法直接确定对象的类型。在ECMAScript中,我们可以通过`instanceof`操作符来检查对象是否是某个构造函数的实例,以此来确定其类型。 构造函数模式是...

    js确定对象类型方法

    本文将详细解释《JavaScript权威指南》(俗称犀牛书)中提到的几种确定JavaScript对象类型的方法,并对每种方法的使用场景和特点进行说明。 1. typeof操作符 typeof操作符用于判断JavaScript中的基本数据类型,它...

    使用JS判断客户端的设备类型

    `detectmobilebrowser-jQuery.js`是基于jQuery的库,它扩展了jQuery对象,提供了一个便捷的方法来检测设备类型。使用它可以简化代码,如下所示: ```javascript if ($.isMobile()) { // 处理移动设备的逻辑 } else...

    面向对象javascript笔记

    2. **函数重载与类型检查**:JavaScript不支持真正的函数重载,但可以通过检查`arguments.length`来确定参数数量,使用`typeof`、`constructor`或`toString.apply()`来检查参数类型。`constructor`属性可以提供关于...

    javascript date类型转成OLE(double)

    在本文档中,我们将详细探讨如何将JavaScript中的Date对象转换为OLE自动化所使用的DATE类型,即一个Double类型的数值表示。 #### 一、背景与需求 在开发过程中,当我们需要与COM组件进行交互时,常常会遇到这样的...

    在javascript中创建对象的各种模式解析

    但工厂模式的缺点在于,它无法确定对象的具体类型,因为返回的对象都是Object类型,无法区分实例的具体类别。 2. 构造函数模式 构造函数模式是一种更为接近传统面向对象语言中类的概念的模式。使用构造函数创建对象...

    请注意: NaN 的数据类型是数字 数组的数据类型是对象 日期的数据类型是对象 null 的数据类型是 object 未定义变

    您可以使用 typeof 运算符来确定 JavaScript 变量的数据类型。 实例 &lt;!DOCTYPE html&gt; &lt;p id="demo"&gt;&lt;/p&gt; document.getElementById("demo").innerHTML = "'Bill' 是 " + typeof "Bill" + " " + "3.14 是 ...

    JavaScript面向对象(OOP)语法.doc

    5. 原型和原型链:JavaScript对象有一个特殊的`__proto__`属性,指向其构造函数的原型。通过原型,对象可以访问构造函数原型上的方法。`prototype`属性用于添加共享方法到所有实例。 6. 构造器和`new`关键字:构造...

Global site tag (gtag.js) - Google Analytics