Object.prototype.toString.call() 区分对象类型



第一种:

<script language="javascript" type="text/javascript">
window.location.href="login.jsp?backurl="+window.location.href;
</script>

第二种:
<script language="javascript">
alert("返回");
window.history.back(-1);
</script>

第三种:
<script language="javascript">
window.navigate("top.jsp");
</script>

第四种:
<script language="JavaScript">
self.location='top.htm';
</script>

第五种:
<script language="javascript">
alert("非法访问!");
top.location='xx.jsp';
</script>

js由于是prototype的对象模型,没有严格意义上的类class。全部都是对象Object要实现继承,可以先
//创建一个父对象
OldObject=function(){
   this.a="属性1"
};
//复制出一个新对象,新对象里面已经具有旧对象的内容
NewObject=new OldObject();
//新增些内容,扩展新对象
NewObject.b="属性2";
NewObject.func=function(){
    //新方法1
}
//新对象具有旧对象的属性
alert(NewObject.a);

在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

要想区别对象、数组、函数单纯使用 typeof 是不行的。或者你会想到 instanceof 方法,例如下面这样:

var a = {};
var b = [];
var c = function () {};

//a b c 都是 Object 的实例
console.log(a instanceof Object) //true
console.log(b instanceof Object) //true
console.log(c instanceof Object) //true

//只有 Array 类型的 b 才是 Array 的实例
console.log(a instanceof Array) //false
console.log(b instanceof Array) //true
console.log(c instanceof Array) //false

//只有 Function 类型的 c 才是 Function 的实例
console.log(a instanceof Function) //false
console.log(b instanceof Function) //false
console.log(c instanceof Function) //true

从以上代码来看,要判断复合数据类型,可以如下判断:

//对象
(a instanceof Object) && !(a instanceof Function) && !(a instanceof Function)
//数组
(a instanceof Object) && (a instanceof Array)
//函数
(a instanceof Object) && (a instanceof Function)

更简便的方式,即是使用 Object.prototype.toString.call() 来确定类型,ECMA 5.1 中关于该方法的描述[1]是这样的:

 
posted on 2013-10-31 10:53  javascript程序员  阅读(364)  评论(0编辑  收藏  举报