javascript instanceof,typeof的区别


Posted in Javascript onMarch 24, 2010

为什么结果会是false呢?

<script type="text/javascript"> 
var aColors = ["red", "green", "blue"]; 
alert(typeof aColors[0]); //output "string" 
alert(aColors[0] instanceof String); //output "false"; 
</script>

你要区分string 与 String的区别
aColors[0] 是 string值类型, 当然不是String的实例啦。参考下面代码
var aColors = ["red", "green", "blue"];
aColors[0]= new String("1")
alert(typeof aColors[0]); //output "Object"
alert(aColors[0] instanceof String); //output "true";

更多可以参考下面的文章:

instanceof 运算符
返回一个 Boolean 值,指出对象是否是特定类的一个实例。
result = object instanceof class
参数
result
必选项。任意变量。
object
必选项。任意对象表达式。
class
必选项。任意已定义的对象类。
说明
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
示例
下面的例子举例说明了 instanceof 运算符的用法。

function objTest(obj){ 
var i, t, s = ""; // 创建变量。 
t = new Array(); // 创建一个数组。 
t["Date"] = Date; // 填充数组。 
t["Object"] = Object; 
t["Array"] = Array; 
for (i in t) 
{ 
if (obj instanceof t[i]) // 检查 obj 的类。 
{ 
s += "obj is an instance of " + i + "\n"; 
} 
else 
{ 
s += "obj is not an instance of " + i + "\n"; 
} 
} 
return(s); // 返回字符串。 
} 
var obj = new Date(); 
document.write(objTest(obj));

instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。
typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof 一律返回object,这正是typeof的局限性。
如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true,同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。再如:function test(){};var a=new test();alert(a instanceof test)会返回true。
谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。
另外:
测试 var a=new Array();if (a instanceof Object) alert('Y');else alert('N');
得'Y'
但 if (window instanceof Object) alert('Y');else alert('N');
得'N'
所以,这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。
使用typeof会有些区别
alert(typeof(window) 会得 object
年轻的时候,先少废话,多做事。
Javascript 相关文章推荐
js multiple全选与取消全选实现代码
Dec 04 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
浅谈基于Vue.js的移动组件库cube-ui
Dec 20 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
vue调用本地摄像头实现拍照功能
Aug 14 Javascript
深入浅析React中diff算法
May 19 Javascript
ExtJs使用IFrame的实现代码
Mar 24 #Javascript
JS 显示当前日期与时间的代码
Mar 24 #Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 #Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
Mar 24 #Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 #Javascript
jQuery AJAX 调用WebService实现代码
Mar 24 #Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 #Javascript
You might like
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
php5与php7的区别点总结
2019/10/11 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
九月份红领巾广播稿
2014/01/22 职场文书
团日活动总结怎么写
2014/06/25 职场文书
三严三实对照检查材料
2014/09/22 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python