问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

下97哪些语句可以在 js 97判断92个对象 ostringobject 是否为 string

发布网友 发布时间:2022-05-18 01:51

我来回答

1个回答

热心网友 时间:2022-05-18 03:21

在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢?

typeof 操作符

对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时

var arr=new Array("1","2","3","4","5");
alert(typeof(arr));

你会收到一个object 的答案,有点让人失望。

instanceof 操作符

JavaScript中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定类的一个实例。
使用方法:result = object instanceof class,还是刚刚的数组,再来一次,嗯,成功的返回 true。

var arrayStr=new Array("1","2","3","4","5");
alert(arrayStr instanceof Array);

小总结:看样子我们今天讨论的问题已经得到了解答,但事实上在多个frame中穿梭就会产生大问题了。

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有

alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false

返回结果为两个False,让*失所望。

ECMA-262 写道

Object.prototype.toString( ) When the toString method is called, the following steps are taken:

Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)

上面的规范定义了Object.prototype.toString的行为:首先,取得对象的一个内部属性[[Class]],然后依据这个
属性,返回一个类似于"[object
Array]"的字符串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不可直接访问的属性,称为“内部属性”)。利用这
个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。还是先来看看在
ECMA标准中Array的描述吧。

ECMA-262 写道

new Array([ item0[, item1 [,…]]])

The [[Class]] property of the newly constructed object is set to “Array”.

于是利用这点,第三种方法登场了。

function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}

call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object
Array]',以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有
toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则是老虎的*,很少有人敢去碰它的,所以能
一定程度保证其“纯洁性”:)

与前面几个方案不同,这个方法很好的解决了跨frame对象构建的问题,经过测试,各大浏览器兼容性也很好,可以放心使用。一个好消息是,很多
框架,比如jQuery、Base2等等,都计划借鉴此方法以实现某些特殊的,比如数组、正则表达式等对象的类型判定,不用我们自己写了。

另外Ext3 也已经换成这样的写法了

isArray : function(v){
return toString.apply(v) === '[object Array]';
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 2022年重庆高等医药专科学校春招分数线 农村信用社转账10万要预约吗 eclipse js 插件名称 高亮显示代码块,页面大神,快降临。 好看的兽人bl文 兽人耽美文推荐 夏天煮什么吃,能解暑(要对胃病有好处的) 胃不舒服应该煮什么吃 小火锅可以煮什么好吃 天气热,煮什么吃消暑? 《狩龙师》txt下载在线阅读全文,求百度网盘云资源 最早进入铁器文明的是哪个王国? 瑜伽里的制戒指的是什么 全职法师圣城为什么这么厉害 库库鲁喜欢芬妮吗为什么会舍命救她 全职法师中古老王和法老王谁更厉害 全职法师里谁是亡灵系的创始人 古老王为什么怕斩空 医疗保险没有办理异地就医手续可以报销吗? 怎样下载pdf电子书 求下载高清免费pdf电子书的网站 谁能通俗的解释一下什么是PID控制 什么是PID控制器 PID控制器 的区别 海南航空的低价机票可以免费托运行李吗 海南航空免费托运20kg 另外另外提20寸行李箱登机吗? 行李箱22寸,重量不超过40斤,请问可以免费托运吗?购买的是海南航空公司的机票。 从美国坐海南航空公司飞机到中国坐经济舱能免费托运几件行李,每件行李多少公? 海南航空特价机票可以免费托运行李吗 海南航空庆阳到广州的飞机托运行李要收费吗? 海南航空HU6122南昌到兰州有免费的托运吗 要坐海南航空,想问一下免费托运行李的事情 请问海南航空两个人一起坐飞机托运行李可以共用行李额度吗?最多是免费多少公斤? 如何将java List 转换成JavaScript 可以操作的对象。具体看问题补充。 分众小贷靠谱吗? 靠墙倒立如果摔倒有危险吗? 安卓系统可否修改 3G/4G 的 DNS? 美的cs6031电压力锅烹稀饭里面的水都溢出来了,导致饭都粘锅上了是什么原因? 美的电压力锅熬稀饭 我买美的电压力锅,煮沸水洗好多次,煮稀饭有怪味? 请问如何把小视频传到朋友圈,就像在朋友圈拍摄的小视频那样。谢谢