JavaScript类型检测小结-http://bbs.51js.com/viewthread.php?tid=82661
老话题了,各种方案和相关讨论都不少,简单总结下:
悠久的typeof JavaScript里只有五种基本数据类型:number, string, boolean, null, undefined. 其它的都是复合数据类型object. 值和数据类型是两码事。比如:null是null类型的唯一值,undefined是undefined类型的唯一值,就如true和false是boolean类型的唯两值一样。 可以用typeof检测出以下6种数据类型:number, string, boolean, undefined, object, function. 注意:typeof null == “object”. null类型的唯一值null的类型是object类型。(很拗口,但事实就是这样) 因此,对于五种基本数据类型来说,用下面的代码就可以检测出来: // 获取变量o的数据类型 instanceof的作用typeof只能检测基本数据类型,对于复合数据类型,除了function,都通通返回'object'. instanceof可以检测某个对象是不是另一个对象的实例,注意instanceof的右操作数必须为对象: alert(1 instanceof Number); // false instanceof还可以检测父类型: function Animal() {}; 可以看出,instanceof不适合用来检测一个对象本身的类型。 救命稻草:constructor JavaScript里的所有对象都拥有一个constructor属性,但JavaScript里并非一切都是对象: alert(1.constructor); // 报错 var o = 1; alert({}.constructor); // Object 可以看出,null和undefined没有constructor,number和string数据类型的字面量,也没有constructor,但number和string数据类型的变量有constructor(在寻找constructor属性时,会自动转换成Number或String对象)。 下面是Johg Resig《Pro JavaScript Techniques》书中的一张表: 这样,对于复合数据类型,我们可以采用下面的方法检测: ... jQuery 1.2中采用的就是上面的代码。 一切看起来很完美,然而不安分的iframe总喜欢来捣点鬼: // 请在非ie浏览器中运行 alert(arr.constructor === Array); // false 原因很简单:不同frame中的Array拥有不同的constructor. 鸭子也上场:Duck Typing 在犀牛书里,提到一句老话:“如果走路像鸭子,叫声也像鸭子,那它就是一个鸭子!” 换言之,对于Array来说,如果一个对象有splice和join属性,那它就是Array. 这就是Duck Typing: function isArray(o) { 上面是Prototype 1.6中的代码。 显然,鸭子检测很容易误把自造的天鹅也当成鸭: alert(isArray({'splice': '', 'join': ''})); // true 鸭子检测的一个用途是,可以用来检测类似对象,比如类数组: function isArrayLike(x) { 上面的代码摘自犀牛书。 时间太晚,今天就写到这。留两个问题:
晚安,朋友们! [ 本帖最后由 lifesinger 于 2009-2-5 14:13 编辑 ] |
引用 报告 回复 |
lifesinger
爬虫
UID 91925 |
|
JavaScript类型检测小结-http://bbs.51js.com/viewthread.php?tid=82661相关推荐
- http://bbs.winos.cn/viewthread.php?tid=1147extra=page=2
http://bbs.winos.cn/viewthread.php?tid=1147&extra=&page=2 转载于:https://blog.51cto.com/215363/ ...
- LINUX新手入门及安装配置FAQ(http://bbs.blueidea.com/viewthread.php?tid=635906amp;page=)
LINUX新手入门及安装配置FAQ 剑气凌人 [楼主] 尖脐 荣誉管理团队 帖子 6386 体力 10046 威望 168 当前 北京 海淀区 发短消息 个人网站 1# 大 中 小 发表于 ...
- JavaScript学习笔记:类型检测
JavaScript学习笔记:类型检测 1.利用typeof检测数据类型 注意:type of null,返回的不是"null",而是"object".type ...
- 聊一聊JavaScript的类型检测
JavaScript的类型检测 一共有四种原生办法检测js的类型 1. typeof 2. instanceof 3. constructor 4. Object.prototype.toString ...
- 说说javascript变量类型和变量类型检测
为什么80%的码农都做不了架构师?>>> javascript是一种弱类型语言,它的典型例子就是即变量在使用的时候可以给它赋值任何类型.那么先来看下javascript都有那些 ...
- JavaScript中类型检测
文章首发: http://www.cnblogs.com/sprying/p/4349426.html 本文罗列了一般Js类型检测的方法,是构建Js知识体系的一小块,这篇文章是我很早之前总结的. 一. ...
- JavaScript基本数据类型及类型检测
数据类型 原始值 Boolean String Number Null Undefined Symbol BigInt 引用数据类型 对象 < Object Function Date RegE ...
- javascript类型注意事项
以下是javascript类型的注意事项: null:表示尚未存在的对象,注意,尽管尚未存在,也是个对象啊,所以用typeof检测一个null值变量的结果是Object:不过,为了便于写if语句,在j ...
- 【前端面试】数据类型与类型检测
1.在JS中有哪些数据类型? (1)JavaScript中的数据类型有6种: 基础数据类型5种:Boolean.String.Number.undefined.null 复杂数据类型1种:Object ...
最新文章
- 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流
- CoordinatorLayout中AppBarLayout的折叠仅依靠滑动RecyclerView实现
- Packet tracer软件安装,模拟网络搭建【Packet tracer安装和使用】
- 2.1.2 操作系统之进程的状态(运行、就绪、阻塞、创建、终止)及转换(就绪-运行、运行-就绪、运行-阻塞、阻塞-就绪)
- 如何基于Weex实现创新交互体验?手淘开源技术BindingX案例解析
- JUnit4套件测试
- centos7邮件服务器SSL配置
- jQuery Mobile中网格grid样式ui-grid-*
- opencv4.3.0+Visual Studio 2019环境配置
- 【风马一族_Java】如何使用ACSLL表的值,
- 2021年下半年软考-网络工程师答案及解析(中级)
- Ubuntu可视化监控温度
- 【智衡跨境电商shopee运营】Shopee平台流量入口有哪些?
- 实验三 数字加法器的设计【Verilog】
- 工具使用分享之爱思助手安装苹果APP
- 7.网络基础配置实验报告(2)
- ECharts修改坐标轴,坐标轴字体,坐标轴网格样式
- 秦王扫六合,虎视何雄哉
- Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken
- java redis点赞_微信亿级在线点赞系统,用Redis如何实现?