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 相关文章推荐
网页设计常用的一些技巧
Dec 22 Javascript
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 Javascript
javascript分页代码(当前页码居中)
Sep 20 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
Feb 06 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
关于vue 项目中浏览器跨域的配置问题
Nov 10 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
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
js 模仿锚点定位的实现方法
2016/11/19 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python验证身份证信息实例代码
2019/05/06 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
关于numpy数组轴的使用详解
2019/12/05 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
企业财务管理制度范本
2015/08/04 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL