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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
JavaScript引用类型Date常见用法实例分析
Aug 08 Javascript
vue中使用props传值的方法
May 08 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
Vue单文件组件开发实现过程详解
Jul 30 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
js获取select标签选中值的两种方式
2014/01/09 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
wxPython事件驱动实例详解
2014/09/28 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python生成lmdb格式的文件实例
2018/11/08 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
CSMA/CD介质访问控制协议
2015/11/17 面试题
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
小学教师节活动方案
2014/01/31 职场文书
农村党员对照检查材料
2014/09/24 职场文书
食品安全责任书范本
2015/05/09 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS