JavaScript中typeof详解
2018-06-24 00:36:13来源:未知 阅读 ()
【范围】typeof返回值范围:
类型 | 结果 |
String | "string" |
Number | "number" |
Boolean | "boolean" |
Undefined | "undefined" |
Object | "object" |
function函数对象 | "function" |
Symbol(ES6新增) | "symbol" |
宿主对象(由JS环境提供) | Implementation-dependent |
【typeof为什么要区分object和function?】
- 答案一:《JavaScript高级程序设计》:从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。
- 答案二:在实际的使用过程中有必要区分Object和Function,所以在typeof这里实现了
【typeof的不足之处】
- 不能区分对象、数组、正则,对它们操作都返回"object";(正则特殊一点后面说)
- Safar5,Chrome7之前的版本对正则对象返回 'function'
- 在IE6,7和8中,大多数的宿主对象是对象,而不是函数;如:typeof alert; //object
- 而在非ID浏览器或则IE9以上(包含IE9),typeof alert; //function
【记忆行为】
- 根据JS数据类型记忆String/Number/Boolean/Undefined/Object/function返回的字符串形式分别为:string/number/boolean/undefined/object/function
- 特殊记忆:
- Symbol(ES6新增)=> "symbol"
- 不能区分对象、数组、正则,返回"object",正则在Safar5,Chrome7之前的版本中返回"function"
- 宿主对象,IE6/7/8返回"object",其他浏览器返回"function"
- 特殊中的特殊
typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型) typeof typeof 1/0; //NaN(这个NaN不是字符串类型,是数值类型) typeof(1/0); //"number" typeof typeof(1/0); //"string" typeof(typeof 1/0); //"number"
【题目和答案】
// 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'; // 但不要使用这种形式! // Symbols typeof Symbol() === 'symbol'; typeof Symbol('foo') === 'symbol'; typeof Symbol.iterator === 'symbol'; // Undefined typeof undefined === 'undefined'; typeof declaredButUndefinedVariable === 'undefined'; typeof undeclaredVariable === 'undefined'; // Objects typeof {a:1} === 'object'; // 使用Array.isArray 或者 Object.prototype.toString.call // 区分数组,普通对象 typeof [1, 2, 4] === 'object'; typeof new Date() === 'object'; // 下面的容易令人迷惑,不要使用! typeof new Boolean(true) === 'object'; typeof new Number(1) ==== 'object'; typeof new String("abc") === 'object'; // 函数 typeof function(){} === 'function'; typeof Math.sin === 'function'; //NaN typeof 1/0 === 'NaN';
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript面向对象入门基础详细介绍 2020-03-29
- Jquery图形报表插件 jqplot简介及参数详解 2020-03-25
- JavaScript函数表达式详解及实例 2020-03-25
- 如何用javascript连接access数据库 2020-03-20
- js中去掉字串左右空格 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash