TypeOf这些知识点你了解吗


Posted in Javascript onFebruary 21, 2016

昨天给同事一起玩耍,同事给我出了一道代码题目,是关于typeof的,感觉挺好玩的,在此分享给大家,顺便巩固下自己对typeof知识点的总结。如有不对,请给予指出,共同进步。

代码是这样的:

<!DOCTYPE html>
<head>
<title>typeof</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<script>
var a= a||null; 
var b= c||null; 
var c= typeof f;
console.log(a);
console.log(b);
console.log(c);
</script>
</body>
</html>

那么,你说运行该代码,chrome调试器会打印什么呢?

请看,效果图

为什么会出现这个结果呢?

首先分析上图中的两个null

因为Javascript在执行代码之前,会先预解析(hoisting)。

什么是预解析(hoisting)呢?

就是在JavaScript中,你可以在函数的任何位置声明多个var语句,它们就像在函数的顶部声明一样发挥作用,且会给var声明的变量赋予一个undefined的初始值。这种行为我们称之为预解析(hoisting)。

所以呢,在执行以上代码前,Javascript会首先将所有的var变量(a,b,c)预解析(hoisting),当执行a||null时,a是undefined的,又因为是||运算,所以结果就是null咯。

c||null是一个道理。

再来看看,为什么typeof f会是undefined呢?f都没定义,不应该会报错吗?

是的,倘若我们去使用一个未定义的变量,浏览器是会报错的。

但是,当用typeof去判断一个未定义的变量,将返回undefined。

那typeof判断值类型时,是个怎么机制呢?总结如下:

1、 对于数字类型的值,typeof会返回number,注意:NaN也是一个数字类型,因为它在JavaScript中代表的是特殊非数字值。

2、 对于字符串类型的值,typeof会返回string。

3、 对于布尔类型的值,typeof会返回boolean。

4、 对于对象,数组,null而言,typeof会返回object

5、 对于函数类型而言,typeof返回function

6、 如果运算数没有定义(不存在或未赋值),将会返回undefined。

Javascript 相关文章推荐
几个有趣的Javascript Hack
Jul 24 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 Javascript
Vue 数据绑定的原理分析
Nov 16 Javascript
详谈javascript异步编程
Feb 21 #Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 #Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
Feb 21 #Javascript
javascript+HTML5自定义元素播放焦点图动画
Feb 21 #Javascript
JavaScript编程学习技巧汇总
Feb 21 #Javascript
Node.js开发者必须了解的4个JS要点
Feb 21 #Javascript
JSON简介以及用法汇总
Feb 21 #Javascript
You might like
php 无限分类的树类代码
2009/12/03 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
Use Word to Search for Files
2007/06/15 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
jQuery实现增删改查
2020/12/22 jQuery
Python中input和raw_input的一点区别
2014/10/21 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
python使用PyQt5的简单方法
2019/02/27 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python中调试或排错的五种方法示例
2019/09/12 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
彪马法国官网:PUMA法国
2019/12/15 全球购物
饲料采购员岗位职责
2013/12/19 职场文书
团队精神演讲稿
2013/12/31 职场文书
平安工地建设方案
2014/05/06 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
出纳岗位职责范本
2015/03/31 职场文书
教师岗位职责范本
2015/04/02 职场文书
社会实践单位意见
2015/06/05 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
Python简易开发之制作计算器
2022/04/28 Python