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 相关文章推荐
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
各情景下元素宽高的获取实现代码
Sep 13 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
JS弹出可拖拽可关闭的div层完整实例
Feb 13 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 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.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
JS 对象介绍
2010/01/20 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
详解vue 命名视图
2019/08/14 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python实现FTP服务器服务的方法
2017/04/11 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
浅谈Python中的继承
2020/06/19 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
如何写好升职自荐信
2014/01/06 职场文书
十佳护士获奖感言
2014/02/18 职场文书
学生会主席演讲稿
2014/04/25 职场文书
地理科学专业自荐信
2014/09/01 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
高三语文教学反思
2016/02/16 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers