typeof、instanceof与isPrototypeOf()的差异与联系
一、typeof
1.typeof的意义及作用:
我们知道ECMAScript中有5种简单(基本)数据类型:Undefined、Null、Boolean、Number、String,以及一种引用数据类型Object。typeof的作用正式用于判断操作数的数据类型的。所有的返回值为以上六种数据类型之一。
2.typeof操作符有下面两种用法:
typeof 操作数
typeof (操作数)
3. typeof中的陷阱
- typeof null 会返回 “object”,因为特殊值null被认为是一个空的对象引用。
- 正则表达式在不同浏览器中返回值不同,具体如下
typeof /s/ === 'function'; // Chrome 1-7... // 不符合 ECMAScript 5.1
typeof /s/ === 'object'; // Firefox 5+ 、Chrome 7+... // 符合 ECMAScript 5.1
4. 测试例子
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字"
typeof Number(1) === 'number'; // 不要这样使用! // Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof返回的肯定是一个字符串
typeof String("abc") === 'string'; // 不要这样使用! // Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 不要这样使用! // Undefined
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量 // Objects
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object'; // 使用Array.isArray或者Object.prototype.toString.call方法可以分辨出一个数组和真实的对象
typeof new Date() === 'object'; typeof new Boolean(true) === 'object' // 令人困惑.不要这样使用
typeof new Number(1) === 'object' // 令人困惑.不要这样使用
typeof new String("abc") === 'object'; // 令人困惑.不要这样使用
// Functions
typeof function(){} === 'function';
typeof Math.sin === 'function';
二、instanceof
1.typeof的意义及作用:
instanceof
运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上
.关于原型链的知识在new和instanceof的内部机制和JavaScript中__proto__与prototype的关系中已做了讲解。
2.instanceof中的陷阱:
在浏览器中,我们的脚本可能需要在多个窗口之间进行交互.多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有不同的内置类型构造函数.这可能会引发一些问题.比如,表达式[] instanceof window.frames[0].Array
会返回false
,因为 Array.prototype !==
window.frames[0].Array
.prototype,因此你必须使用
Array.isArray(myObj)或者
Object.prototype.toString.call(myObj) === "[object Array]"来判断myObj是否是数组.
三、isPrototypeOf
1.typeof的意义及作用:
检测一个对象是否存在于另一个对象的原型链中.其作用与instanceof有点相似,但使用方法是不一样的。
2.用法与例子:
function Fee() {
// . . .
} function Fi() {
// . . .
}
Fi.prototype = new Fee(); function Fo() {
// . . .
}
Fo.prototype = new Fi(); function Fum() {
// . . .
}
Fum.prototype = new Fo(); var fum = new Fum();
. . . Fi.prototype.isPrototypeOf(fum); //true
fum instanceof Fi; // true
typeof、instanceof与isPrototypeOf()的差异与联系的更多相关文章
- [js方法pk]之instanceof() vs isPrototypeOf() hasOwnProperty() vs propertyIsEnumerable()
这几个方法在js的高级编程中经常用到,对于新手来说可能还不知道他们有什么区别,我把我的体会总结下来,供大家参考: 首先,定义一个对象: function Parent() {this.name = & ...
- 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()
typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...
- valueOf() toString() typeof instanceof
******在chrome console中运行{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎 ...
- typeof instanceof 之间的区别总结
typeof 它返回值是一个字符串,该字符串说明运算数的类型. a=1; b=true; c="c"; d=function(){ console.log(" ...
- typeof instanceof
typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefinedinstanceof用于判断一个 ...
- Javascript中typeof instanceof constructor的区别
typeof typeof,是一个运算符,运算中需要一个操作数,运算的结果就是这个操作数的类型,运算的结果是一个字符串.他有一定的局限性,对于对象类型的值,只能得到一个object结果,却不能精确得到 ...
- 【Flex教程】#009 As/typeof /instanceof /is的作用
“as” :主要用它做类型转化 假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写: Class2(c1); AS3 中的操作符: as 实现就 ...
- 推断js中的类型:typeof / instanceof / constructor / prototype
怎样推断js中的类型呢,先举几个样例: var a = "jason"; var b = 123; var c = true; var d = [1,2,3]; var e = n ...
- typeof + instanceof+toString+constructor什么推理javascript数据类型
一个.typeof JS这些变量是弱类型(这是弱类型)的,它可以不管用来存储数据的类型的. typeof 数据类型可用于检测给定的变量.可能的返回值: 1. 'undefined' --- 这个值没有 ...
随机推荐
- 让你的软件飞起来:RGB转为YUV【转】
转自:http://blog.csdn.net/wxzking/article/details/5905195 版权声明:本文为博主原创文章,未经博主允许不得转载. 朋友曾经给我推荐了一个有关代码优化 ...
- Linux设备模型(3)_Uevent【转】
转自:http://www.wowotech.net/device_model/uevent.html 1. Uevent的功能 Uevent是Kobject的一部分,用于在Kobject状态发生改变 ...
- SpringMVC与Spring的父子容器关系
问题: 在整合框架的时候有人也许会产生一个问题:能不能只配置一个扫描包加载实现类的扫描驱动,即在根目录下扫描所有的注解(@Controller.@Service.@Repository.@Compne ...
- Solidity 文档--第一章:智能合约入门
一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. 存储 contract SimpleStorage { uint storedData; f ...
- [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3202 Solved: 1198[Submit][Status ...
- (十一)数组array
变量:只能存一个值,数组可以存多个值 (1)普通数组,索引下标是整数: 1)定义: 方法一:一次赋一个值:语法:数组名[下标]=变量值 array[1]=linux array[2]=shell 方法 ...
- mysql 游标的使用
游标是什么?? 游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集. 使用游标 在介绍如何创建游标之前,先说明下如何使用游标. 使用游标涉及几个 ...
- 初步接触CERNVM
初步接触的来源是对ROOT数据分析工具的搜索,看到一个叫做Life as a Physicist的国外博客.知道了这个包含容器分发的软件,跟重要的是,这个欧洲核子中心开发的平台,对于我等科研人员是一大 ...
- [Codeforces 30D] Kings Problem
Brief Intro: 有n+1个点,其中n个点在X轴上,求从第k个点出发最短的汉密尔顿路径 Solution: 分类讨论+逐个枚举 设dist(i)是第i个点到n+1的距离 cal1(l,r)是n ...
- Codeforces 785E Anton and Permutation(分块)
[题目链接] http://codeforces.com/contest/785/problem/E [题目大意] 一个1到n顺序排列的数列,每次选择两个位置的数进行交换,求交换后的数列的逆序对数 [ ...