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 相关文章推荐
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
理解javascript对象继承
Apr 17 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
vue-axios使用详解
May 10 Javascript
使用vue中的v-for遍历二维数组的方法
Mar 07 Javascript
小程序实现五星点评效果
Nov 03 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
webpack-url-loader 解决项目中图片打包路径问题
Feb 15 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 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 mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
angular分页指令操作
2017/01/09 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python Socket之客户端和服务端握手详解
2017/09/18 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python无损压缩图片的示例代码
2020/08/06 Python
体育系毕业生求职自荐信
2014/04/16 职场文书
终止合同协议书
2014/04/17 职场文书
2016年春节慰问信息
2015/03/25 职场文书
整改通知书格式
2015/04/22 职场文书
初中政治教学反思
2016/02/23 职场文书
golang为什么要统一错误处理
2022/04/03 Golang
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python