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 相关文章推荐
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
javascript教程之不完整的继承(js原型链)
Jan 13 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
JavaScript内存管理介绍
Mar 13 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
vue页面跳转后返回原页面初始位置方法
Feb 11 Javascript
微信小程序实现图片上传功能
May 28 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 Javascript
JS监听Esc 键触发事键
Apr 14 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对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
php微信公众平台开发类实例
2015/04/01 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
常见python正则用法的简单实例
2016/06/21 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Python3.8中使用f-strings调试
2019/05/22 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
函授本科个人自我鉴定
2014/03/25 职场文书
责任心演讲稿
2014/05/14 职场文书
六一儿童节标语
2014/10/08 职场文书
领导干部失职检讨书
2015/05/05 职场文书