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 01 Javascript
JavaScript表达式:URL 协议介绍
Mar 10 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
jquery validate 自定义验证方法介绍 日期验证
Feb 27 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
javascript学习指南之回调问题
Apr 23 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
Require.js的基本用法详解
Jul 03 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
jquery中ajax学习笔记3
2011/10/16 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
html5时钟实现代码
2010/10/22 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
政协调研汇报材料
2014/08/15 职场文书
今日说法观后感
2015/06/08 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技