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 相关文章推荐
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
canvas绘制一个常用的emoji表情
Mar 30 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
Feb 21 Javascript
vue router 组件的高级应用实例代码
Apr 08 Javascript
JavaScript如何判断input数据类型
Feb 06 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改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
JS继承 笔记
2011/07/13 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
Python中下划线的使用方法
2015/03/27 Python
tensorflow更改变量的值实例
2018/07/30 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python logging日志模块原理及操作解析
2019/10/12 Python
基于Python解密仿射密码
2019/10/21 Python
python爬虫请求头设置代码
2020/07/28 Python
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
员工年终演讲稿
2014/01/03 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
五年级学生评语
2014/04/22 职场文书
金融事务专业求职信
2014/04/25 职场文书
党员承诺践诺书
2014/05/20 职场文书
鲁迅故居导游词
2015/02/05 职场文书
千与千寻观后感
2015/06/04 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
Spring实现内置监听器
2021/07/09 Java/Android
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android