instanceof与typeof(写一个方法判断数据类型),prototype与_proto_
来源:互联网 发布:福缘充值软件 编辑:程序博客网 时间:2024/06/11 23:44
instanceof与typeof
typeof operand
operand
是一个表达式,表示对象或原始值,其类型将被返回
下表总结了 typeof
可能的返回值。有关类型和原语的更多信息,可查看 JavaScript数据结构 页面。
"undefined"
Null"object"
(见下方)Boolean"boolean"
Number"number"
String"string"
Symbol (ECMAScript 6 新增)"symbol"
宿主对象(由JS环境提供)Implementation-dependent函数对象 ( [[Call]] 在ECMA-262条款中实现了)"function"
任何其他对象"object"
object instanceof constructor
instanceof
运算符用来检测 constructor.prototype
是否存在于参数 object
的原型链上
instanceof 运算符 判断的对象一般有:Array Function Object 等引用类型的实例对象
// 定义构造函数function C(){} function D(){} var o = new C();// true,因为 Object.getPrototypeOf(o) === C.prototypeo instanceof C; // false,因为 D.prototype不在o的原型链上o instanceof D; o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回trueC.prototype instanceof Object // true,同上C.prototype = {};var o2 = new C();o2 instanceof C; // trueo instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.D.prototype = new C(); // 继承var o3 = new D();o3 instanceof D; // trueo3 instanceof C; // true
需要注意的是,如果表达式 obj instanceof Foo
返回true,则并不意味着该表达式会永远返回true,因为Foo.prototype属性的值有可能会改变
,改变之后的值很有可能不存在于obj
的原型链上,这时原表达式的值就会成为false
。另外一种情况下,原表达式的值也会改变,就是改变对象obj
的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的__proto__魔法属性
,是可以实现的
。比如执行obj.__proto__ = {}之后
,obj instanceof Foo就会返回false了。
写一个方法判断数据类型:
<script>
function judType(vars){
if(vars===null) return 'null';
else if(typeof vars!='object') return typeof vars;
else{
if(vars instanceof Array){
return 'Array';
}
if(vars instanceof Function){
return 'Function';
}
else if(vars instanceof Object)return 'object';
}
}
var a=1;
var b="22";
var c=true;
var d;
var e=null;
var g={a:a};
var h=[1,2,3];
var i=function(){};
console.log(judType(a));
console.log(judType(b));
console.log(judType(c));
console.log(judType(d));
console.log(judType(e));
console.log(judType(g));
console.log(judType(h));
console.log(judType(i));
console.log(null==undefined);//true
console.log(null===undefined);//false
</script>
prototype与_proto_
prototype 是原型,是Function对象才有的属性(如果你不信,你尽可尝试其他的数据类型,得到的绝对是undefined),原型主要是用来实现继承,从而用js 进行面向对象编程;
有以下代码:
var person=function(){this.name="animal";};var p=new person();
console.log(person.prototype);//object Object
console.log(p.prototype);//undefined
因为构造函数的实例对象没有prototype,于是有_proto_
所有对象的_proto_都指向其构造函数的prototype,而构造函数的_proto_则都指向Function.prototype,一个空函数(Empty function)
有以下代码:
var person=function(){this.name="animal";};var p=new person();console.log(person.prototype);//object Objecconsole.log(person.__proto__);//function Empty() {}console.log(p.prototype);//undefinedconsole.log(p.__proto__);//object Objecconsole.log(person.prototype==p.__proto__);//true//可见,实例指向函数实例对象的_proto_ 指向 函数的原型prototype;
var man=function (){}man.prototype=new person();//子类原型链继承父类var littleman=new man();console.log(littleman.name);//personconsole.log(man.prototype);//[object Object]console.log(man.__proto__);//function Empty() {}console.log(littleman.prototype);//undefinedconsole.log(littleman.__proto__);//[object Object]原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
在JavaScript中,用_proto_ 属性来表示一个对象的原型链。当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止!原型链继承方法 参考博文:http://blog.csdn.net/prince_fmx/article/details/77619592注意:prototype与_proto_是属性,typeof是操作符,instanceof是运算符
- instanceof与typeof(写一个方法判断数据类型),prototype与_proto_
- JavaScript _proto_与prototype
- prototype与_proto_
- 如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较
- js中判断数据类型的属性typeof、instanceof、 constructor、 prototype
- typeof,instanceof,Object.prototype.toString来判断数据类型
- Javascript中数据类型及其判别方法(typeof instanceof Object.prototype.toSting.call(obj)的区别)
- js之prototype与_proto_
- javaScript中的prototype与_proto_
- 判断数据类型:typeof和instanceof
- 判断变量的类型(typeof、instanceof、Object.prototype.toString)
- typeof、instanceof与constructor
- typeof与instanceof区别
- typeof 与 instanceof
- typeof 与instanceof
- typeof 与instanceof
- typeof与instanceof
- typeof与instanceof
- 【Redis缓存机制】10.主从模式
- HDU
- 设置div根据浏览器自适应高度
- dubbo服务化使用实例
- 我是一个进程
- instanceof与typeof(写一个方法判断数据类型),prototype与_proto_
- 你确定了解连续赋值运算嘛?
- 代码大全
- js的一道经典题目
- js知识整理(一)
- React Native按需加载 手Q狼人杀探索之路
- 我是一个线程
- arm-linux的TFTP 服务器搭建和测试
- git配置