举例讲解如何判断JavaScript中对象的类型_基础知识
在编写js程序的过程中,可能常常需要判断一个对象的类型,例如你写了一个函数,需要通过判断不同的参数类型来编写不同的代码。
首先可能会想到typeof操作符,看下面的这个例子:
得到的结果如下:
从上面的结果可以看到,用typeof操作符可以显示对象的类型,那么typeof操作符作用域null和undefined的结果会是什么呢?
typeof 操作符作用于null居然显示”object“(这个好像不科学,我还以为会显示”null'“),作用于undefined显示”undefined“(这个符合我们希望的结果),所以当用typeof操作符来判断一个对象的类型时,特别要小心,因为这个对象有可能是null。上面只是给了一部分typeof作用于这些对象的结果,下面的表列出了typeof操作符作用于Boolean, Number, String, Array, Date, RegExp, Object, Function, null, undefined的结果(有兴趣的读者可以自行测试):
从上表的结果可以看出Array, Date, RegExp显示的都是object,为什么不是直接的显示对象的类型呢?这就要引出js的另外一个操作符了:instanceof操作符,这个操作符用来判断一个对象是否为某种类型的对象,计算的值为true或者false。先来看下:
很显然通过这个instanceof是能判断对象的类型的,但是这个只能判断除了基本类型(包含String类型)的其它类型,他是不能判断基本类型的。但是instanceof不是总是能正常判断的,考虑一个框架的情形,要判断其类型的对象是另外一个frame传递过来的对象,首先来看下下面的例子。
main.html
Main
frame1.html
frame1
frame2.html
frame2
names对象是在frame1框架中的,此时是通过frame1框架的Array来创建的,如果把names对象拿到frame2中的Array作比较,很显然names不是frame2中的Array的实例,以为frame1和frame2压根就不是同一和Array,从第2个现实结果可以很明显的看出names是他本身所在的frame的实例,从第3个输出可以看出frame1的Array和frame2的Array是不同的。那么遇到上面这种跨frame的比较该怎么办呢?我们总不能每次都拿框架对应的Array来做比较吧,有一种必须的办法可以解决上面的问题,看下面的代码:
{}.toString表示获取Object对象上的toString方法(这个方法时Object对象的基本方法之一),toString.call(now)表示调用toString方法。调用Date对象最原生的toString()(这个方法是Object上面的方法)方法可以显示[object Date]类型的字符串,假如是Array,则会产生[object Array]的字样,也就是说进行上面的操作会显示类似[object Class]的字样,那么我们只要判断这个字符串不就可以知道其类型了吗?由此可以写出如下的工具类:
tools.js
tools提供了type,isArray,isFunction等方法用来判断对象的类型,根据实际的需要可以自己添加需要判断类型的方法。type接受一个obj参数,它将对象的实际类型以小写的形式返回,比如你的需要判断对象的类型是Array,那么此方法将会返回array.
根据上面提供的工具类,再重新改写上面的例子:
fram2.html
frame2
至此通过上面的根据类就可以很容易的判断对象的类型了。
注意:在IE中例如像alert这样的元素是不能判断的。
你是否需要了解?
如何判断Javascript对象是否存在的简单实例_javascript技巧_百度...
只有对Javascript语言的实现细节非常清楚,才可能分得清它们的区别。第一种写法根据直觉,你可能觉得可以这样写:但是,运行这段代码,浏览器会直接抛出ReferenceError错误,导致运行中断。请问错在哪里?对了,if语句判断myObj是否为空时,这个变量还不存在,所以才会报错。改成下面这样,就能正确运行了。为什...
举例讲解如何判断JavaScript中对象的类型_基础知识
先来看下:很显然通过这个instanceof是能判断对象的类型的,但是这个只能判断除了基本类型(包含String类型)的其它类型,他是不能判断基本类型的。但是instanceof不是总是能正常判断的,考虑一个框架的情形,要判断其类型的对象是另外一个frame传递过来的对象,首先来看下下面的例子。main.html Main fr...
JS判断对象是否存在的十种方法
1、直接判断对象不为null if (!myObj) { var myObj = { };} Javascript语言是"先解析,后运行",解析时就已经完成了变量声明 2、使用window对象判断某对象是否存在 if (!window.myObj) { var myObj = { };}
javascript里面如何判断一个字符是否为字母?
举例如下: var s = '1';\/\/需要判断的字符,如果是字符串判断会不准确 var flag=false;if((s>='a'&&s<='z')||(s>='A'&&s<='Z'))flag=true;alert(flag);
JS怎么判断一个对象是否为空
判断一个对象是否为空,介绍如下三种判断方法:1、直接用for...in...遍历属性,结果为真是“非空数组”,否则是“空数组”,代码如下:function judgeObj(obj){ for(var a in obj){ return alert('非空对象')} return alert('空对象')} 2、通过JSON自带的.stringify方法来判断,代码如下:if...
js中如何判断一个DOM对象是否存在?
1、直接判断对象不为null if (!myObj) { var myObj = { };} Javascript语言是"先解析,后运行",解析时就已经完成了变量声明 2、使用window对象判断某对象是否存在 if (!window.myObj) { var myObj = { };} 3、使用this对象判断某对象是否存在 if (!this.myObj) { this.myObj = { ...
简述java与javascript的主要区别
举例来说,Java可能被用于开发一个复杂的库存管理系统,该系统需要处理大量数据,支持多线程访问,并确保数据的一致性和安全性。而JavaScript则更适合用于实现该系统的前端界面,如动态显示库存信息、实时更新数据等。通过JavaScript,我们可以为用户提供一个交互性强、响应迅速的操作界面。总的来说,Java和...
js中!!的用法
举例来说,对于变量 `a`,如果我们要确保它既非空也非未定义,并且包含非空字符串,那么使用 `!!` 运算符的代码会如下所示:通过 `!!a`,我们实际上在做两步操作:首先判断 `a` 是否存在(非 `null` 和 `undefined`),然后判断 `a` 是否包含非空字符串。如果 `a` 满足条件,`!!a` 的...
JavaScript怎样判断两个日期字符串的大小
;var TwoYear = DateTwo.substring(0,DateTwo.indexOf ("-"));if (Date.parse(OneMonth+"\/"+OneDay+"\/"+OneYear) > Date.parse(TwoMonth+"\/"+TwoDay+"\/"+TwoYear)){ return true;} else { return false;} } 举例:alert(compareDate(''2010-12-01'',''2009-05-02'''));...
JAVASCRIPT中的javascript:void(0)和javascript:void(NULL)有什么区别...
首先这是一段javascript代码,void是一个操作符,该操作符指定要计算一个表达式但是不返回值。是个死链接,该连接无任何操作,和普通文本效果一样。只会显示一个鼠标手型样式 这个是没有所传值失败,显示为null,没有实际的意义。