1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串。如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在)。
但 typeof 的能力有限,其对于Date、RegExp类型返回的都是"object"。如:
typeof {}; // "object"
typeof []; // "object"
typeof new Date(); // "object"
所以它只在区别对象和原始类型的时候才有用。要区一种对象类型和另一种对象类型,必须使用其他的方法。如:instanceof 运算符或对象的 constructor 属。
2)instanceof 运算符。 instanceof 运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字或构造函数。如果 object 是 class 或构造函数的实例,则 instanceof 运算符返回 true。如果 object 不是指定类或函数的实例,或者 object 为 null,则返回 false。如:
[] instanceof Array; // true
[] instanceof Object; // true
[] instanceof RegExp; // false
new Date instanceof Date; // true
所以,可以用instanceof运算符来判断对象是否为数组类型:
function isArray(arr)
{
return arr instanceof Array;
}
3)constructor 属性。 JavaScript中,每个对象都有一个constructor属性,它引用了初始化该对象的构造函数,常用于判断未知对象的类型。如给定一个求知的值通过typeof运算符来判断它是原始的值还是对象。如果是对象,就可以使用constructor属性来判断其类型。所以判断数组的函数也可以这样写:
function isArray(arr)
{
return typeof arr == "object" && arr.constructor == Array;
}
很多情况下,我们可以使用instanceof运算符或对象的constructor属性来检测对象是否为数组。例如很多JavaScript框架就是使用这两种方法来判断对象是否为数组类型。
但是检测在跨框架(cross-frame)页面中的数组时,会失败。原因就是在不同框架(iframe)中创建的数组不会相互共享其prototype属性。例如:
复制代码 代码如下:
<script>
window.onload=function(){
var iframe_arr=new window.frames[0].Array;
alert(iframe_arr instanceof Array); // false
alert(iframe_arr.constructor == Array); // false
}
</script>
<body>
<iframe></iframe>
</body>
在Ajaxian上看到了一种精确的检测方法,跨原型链调用toString()方法:Object.prototype.toString()。可以解决上面的跨框架问题。
当Object.prototype.toString(o)执行后,会执行以下步骤:
1)获取对象o的class属性。
2)连接字符串:"[object "+结果(1)+"]"
3)返回 结果(2)
例如:
Object.prototype.toString.call([]); // 返回 "[object Array]"
Object.prototype.toString.call(/reg/ig); // 返回 "[object RegExp]"
这样,我们就可以写一个健壮的判断对象是否为数组的函数:
复制代码 代码如下:
function isArray(arr)
{
return Object.prototype.toString.call(arr) === "[object Array]";
}
此种方法得到国外多个javaScript大师的认可,在即将发布的jQuery 1.3中将使用这种方法来检测数组。
prototype.js的一个维护者写了下面这个函数,用于获取对象的类型名
function __getClass(object)
{
return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
};
扩展一下,用于检测各种对象类型:
复制代码 代码如下:
var is =
{
types : ["Array", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", "HTMLDocument"]
}
for(var i = 0, c; c = is.types[i ++ ]; )
{
is[c] = (function(type)
{
return function(obj)
{
return Object.prototype.toString.call(obj) == "[object " + type + "]";
}
}
)(c);
}
alert(is.Array([])); // true
alert(is.Date(new Date)); // true
alert(is.RegExp(/reg/ig)); // true
相关推荐:
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
AI免费生成:释放创造力的秘密武器
怎么用AI缩写文章,轻松提高效率的全新方法
优化页面-提升用户体验与搜索引擎排名的关键,绍兴视频营销推广
AI人工智能:开发与应用的必备软件推荐
ChatGPT不能打开EL?揭秘这一困扰背后的真相与解决方案,ai被动房
SEO运维:提升网站排名的核心战略,邢台网站建设优化建站
SEO代做:让你的企业轻松登顶搜索引擎,快速提升曝光率,seo 提高注册量
AI代写文章:高效创作的新风尚
为什么新手做seo好做,为什么要懂seo ,ai少女 3060显卡
SEO译为:网站排名背后的优化策略,会展中心网站优化
seo要会些什么,seo需要学些什么内容 ,轻盈ai
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
什么是seo发外链,seo外链类型有哪些 ,小小苏ai
企业关键字-助力企业成功的隐形动力,闽侯县企业网站建设
SEO关键词是什么意思?全面解析SEO关键字的核心作用,华为ai音箱 百度ai音箱
OpenArtAI如何进入:数字艺术的未来之门,分析海报ai
seo用什么论坛引流,seo引流方法 ,ai写作续写神器
SEO优化:让你的网站在竞争中脱颖而出,临沧seo代理
SEO客服:如何提升客户体验与业务转化的双赢策略,鄂州网站建设公司教程
SEO分类:从基础到进阶,全面解析SEO优化的关键要素,新建设网站排名
乘风SEO:突破困境,领航网络营销新时代,武汉靠谱的关键词排名
ChatGPT充值打不开?这几招教你轻松解决问题!,免费的ai写作绘图
ChatGPT怎么找梯子:突破网络限制,轻松访问AI助手的终极指南,鬼灭之刃人物AI还原
SEO那么重要,企业如何通过它脱颖而出?,自媒体推广营销的概念
SEO这样做,轻松引爆流量,助力企业成长,无极标准网站优化好处
SEO有意:如何通过优化策略提升网站排名与流量,天津政府智慧网站建设
SEO合同:确保您网站优化成功的关键保障,微博营销推广规则最新
2025年SEO最新技术:让你的网站脱颖而出!,ai少女特色
京东业绩再创新高:未来电商巨头的成功之道,如何做seo优化留痕
SEO优化如何进行:提升网站排名,轻松超越竞争对手,ai写作怎么操作手机
为什么“搜狗不收录”会成为企业SEO的新挑战?,烤肉店的线下营销与推广
AI.生成重新定义创造力的新纪元
SEO结构优化:助力网站提升排名与流量的关键策略,杭州小网站推广哪家好做
seo组建需要什么条件,seo建站的步骤 ,ai肌肉宝宝
SEO自己:打造属于你的数字营销利器,微信裂变营销推广软件
ChatGPT界面看不到用户:隐秘的互动方式与智慧的背后,AI和UR
seo网站是什么东西,seo网站是什么东西啊 ,ai锯齿消失
什么是seo的豆子,何为seo ,ai圆复制
360ai问答-智能时代的全能助手,未来的智慧生活,ai生成白底
为什么关键词太少会影响你的网络营销效果?,陕西seo网站推广工具
什么是seo长尾词,什么是seo长尾词的概念 ,绿茶ai换脸杨超越
ChatGPT服务器坏了?了解背后的技术与应对策略,AI模块代表
seo规范是什么,seo行业标准 ,啊龙ai音乐
ChatGPT无法打开?这些解决办法让你重新畅享智能对话!,北大写作ai
AI撰写率:让创作变得更高效,助力内容产业腾飞,人力ai
ChatGPT198元永久会员,开启智慧之门,体验AI的极致服务!,老孙教ai
seo跟sem是什么,seo和sem的概念 ,惠威的ai功能
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
整理文章的AI:提升写作效率的智能助手