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 相关文章推荐
自写的一个jQuery圆角插件
Oct 26 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
如何判断Javascript对象是否存在的简单实例
May 18 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
关于页面刷新vuex数据消失问题解决方案
Jul 03 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
vue搜索和vue模糊搜索代码实例
May 07 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
微信小程序实现翻牌抽奖动画
Sep 21 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 Javascript
JS实现简单控制视频播放倍速的实例代码
Apr 18 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP运行模式的深入理解
2013/06/03 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
python网络编程实例简析
2014/09/26 Python
python实现无证书加密解密实例
2014/10/27 Python
Python之web模板应用
2017/12/26 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python async with和async for的使用
2019/06/20 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
keras:model.compile损失函数的用法
2020/07/01 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
青年教师培训方案
2014/02/06 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
小学五年级学生评语
2014/04/22 职场文书
员工离职感谢信
2015/01/22 职场文书
应届生简历自我评价
2015/03/11 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
离职告别感言
2015/08/04 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js