首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

javascript 高级技巧(1)

javascript 高级技巧(1)

一、安全的类型检测

JavaScript 内置的类型检测机制并非完全可靠。事实上,发生错误否定及错误肯定的情况也不在少
数。比如说typeof操作符吧,由于它有一些无法预知的行为,经常会导致检测数据类型时得到不靠谱
的结果。Safari(直至第 4 版)在对正则表达式应用typeof操作符时会返回"function",因此很难确
定某个值到底是不是函数。
再比如,instanceof操作符在存在多个全局作用域(像一个页面包含多个 frame)的情况下,也
是问题多多。一个经典的例子(第 5 章也提到过)就是像下面这样将对象标识为数组。

var isArray = value instanceof Array;

以上代码要返回true,value必须是一个数组,而且还必须与Array构造函数在同个全局作用域
中。(别忘了,Array是window的属性。)如果value是在另个 frame 中定义的数组,那么以上代码
就会返回false。
在检测某个对象到底是原生对象还是开发人员自定义的对象的时候,也会有问题。出现这个问题的
原因是浏览器开始原生支持JSON对象了。因为很多人一直在使用 Douglas Crockford 的 JSON 库,而该
库定义了一个全局JSON对象。于是开发人员很难确定页面中的JSON对象到底是不是原生的。

原理:在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串

    //写成公用函数
    function type(val){
       return Object.prototype.toString.call(val)
    }
返回列表