概述

这是我看《你不知道的JavaScript(中卷)》中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用。

typeof

我们知道js中有七种内置类型:undefined, null, string, boolean, object, number, symbol。

我们分别用typeof对它们一一进行检查:

typeof void(0)      //输出'undefined'
typeof null //输出'object'
typeof 'haha' //输出'string'
typeof true //输出'boolean'
typeof {} //输出'object'
typeof 3 //输出'number'
typeof (Symbol(2)) //输出'symbol'

可以看到,除了null值会被检查为object之外,其它的都显示正常。

那么怎么检查null值呢,方法是利用所有的对象都是真值但是null是假值这一特性:

var a = null;
!a && typeof a === 'object'; //true

函数

虽然函数并不是内置类型,但是它的typeof值与上面的任何一个都不同:

typeof function() {} //输出'function'

所以,当我们判断是否为对象的时候,仅仅用typeof的值为object是不行的,还要加上typeof值为function的情况。

值得一提的是,函数也有“长度”,它的length值是它的参数个数:

function haha() {
return;
} function jaja(a) {
return;
} function yaya(...args) {
return args;
} haha.length; //0
jaja.length; //1
yaya.length; //0

数组

数组也是一个特殊的对象,它和函数一样不是内置类型,但是和函数一样非常常用。那怎么判断一个值是否是数组呢?

最简单的方法是利用Array.isArray()方法:

Array.isArray([2, 3]); //true
Array.isArray({}); //false

但是isArray在有些浏览器里面不兼容,所以要写一个polyfill代码

function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}

Object.prototype.toString.call

正如上面的例子所示,Object.prototype.toString.call是另一个判断类型的好办法。比如判断boolean:

function isBoolean(obj) {
return Object.prototype.toString.call(obj) === '[object Boolean]';
}

typeof的防范机制

我们经常会先判断一个变量存不存在,然后再来使用这个变量:

if(debug) {
console.log('Debugging is starting!');
}

但是如果debug这个变量没有声明的话,上面的语句就会报语法错误:Uncaught ReferenceError: debug is not defined。

怎么办呢?冒昧的去声明一个变量并不是一个很好的解决方法。这个时候就可以利用typeof的防范机制:如果一个变量a未声明,那么typeof a不会报语法错误,而是会返回undefined

typeof hahahhhh; //'undefined'

所以一般把上面的代码改成下面的形式:

if(typeof debug !== 'undefined') {
console.log('Debugging is starting!');
}

你不知道的javascript读书笔记3的更多相关文章

  1. <你不知道的JavaScript>读书笔记

    近几天看了一本不错的 JavaScript 的书,是 Kyle Simpson 写的 <You Don't know JS>.这本书是 Kyle Simpson 在 Github 上的开源 ...

  2. 你不知道的JavaScript上卷笔记

    你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...

  3. 数据结构与算法JavaScript 读书笔记

    由于自己在对数组操作这块比较薄弱,然后经高人指点,需要好好的攻读一下这本书籍,原本想这个书名就比较高深,这下不好玩了.不过看着看着突然觉得讲的东西都比较基础.不过很多东西,平时还是没有注意到,故写出读 ...

  4. 《你不知道的JavaScript》笔记(一)

    用了一个星期把<你不知道的JavaScript>看完了,但是留下了很多疑惑,于是又带着这些疑惑回头看JavaScript的内容,略有所获. 第二遍阅读这本书,希望自己能够有更为深刻的理解. ...

  5. 【你不知道的javaScript 上卷 笔记3】javaScript中的声明提升表现

    console.log( a ); var a = 2; 执行输出undefined a = 2; var a; console.log( a ); 执行输出2 说明:javaScript 运行时在编 ...

  6. JavaScript读书笔记(1)

    从今天开启每天看书记笔记模式,<JavaScript高级程序设计(第3版)> 1. Javascript最初是为了解决输入验证器的问题,现在已经发展成一门复杂的语言: 2.  语言标准为E ...

  7. JavaScript读书笔记(一)

    自动类型转换 在JavaScript中,使用 == .=== 和 - 等运算符能够使得类型自动转换. 关于不同类型的值的比较 flase == 0; //true "" == fl ...

  8. 悟透javascript读书笔记

    1.undefined,null,0,""  这四个值转换为逻辑值时是false,其他无论简单类型值,对象或者函数转换过来都是true 2.如图 第一个是“声明了一个变量,给变量赋 ...

  9. 高性能的JavaScript -- 读书笔记

    高性能的JavaScript 一.      加载和运行 将脚本放在底部 脚本下载解析执行时,页面已经加载完成并显示在用户面前 成组脚本 减少外部脚本文件数量,整合成一个文件 延迟脚本 动态脚本元素 ...

随机推荐

  1. 【Noip模拟 20160929】花坛迷宫

    题目描述 圣玛格丽特学园的一角有一个巨大.如迷宫般的花坛.大约有一个人这么高的大型花坛,做成迷宫的形状,深受中世纪贵族的喜爱.维多利加的小屋就坐落在这迷宫花坛的深处.某一天早晨,久城同学要穿过这巨大的 ...

  2. 阿里云ODPS <====>蚂蚁大数据

    1.命令行客户端工具的安装参考文档:http://repo.aliyun.com/odpscmd/?spm=a2c4g.11186623.2.17.5c185c23zHshCq 2.创建和查看表:ht ...

  3. JavaScript: DOM Docunment

    Meaning: In browser , we exchange data using JavaScript code with user. We should know that most of ...

  4. IntelliJ IDEA——SVN的配置及使用

    服务端:VisualSVN-Server-3.9.1-x64 下载地址:https://www.visualsvn.com/server/download/ TortoiseSVN 安装 下载地址:h ...

  5. eclipse删除了文件,找回方法

    本人通过eclipse在前段时间上传svn代码的时候,代码掉完了,导致的原因是:svn服务器上有有个一样的文件夹,只是大小写不同,但是svn会认为是一样的文件夹,导致svn[]判别不了传到哪个文件夹去 ...

  6. 419. Battleships in a Board 棋盘上的战舰数量

    [抄题]: Given an 2D board, count how many battleships are in it. The battleships are represented with  ...

  7. 《笨方法学Python》加分题6

    types_of_people = 10 x = f"There are {types_of_people} types of peoples." binary = "b ...

  8. 选择困难症的福音——团队Scrum冲刺阶段-Day 3

    选择困难症的福音--团队Scrum冲刺阶段-Day 3 今日进展 编写提问部分 做了不同问题所对应的游戏选项,但关于游戏分类的界面还没有做完 登陆注册界面 更改ui界面,ui界面终于变好看了:) 学习 ...

  9. 基于ASP.NET高职学生工作管理系统--文献随笔(八)

    一.基本信息 标题:基于ASP.NET高职学生工作管理系统 时间:2015 出版源:电子科技大学 关键词:高职; 学生管理; ASP.NET; 系统; 二.研究背景 问题定义:随着社会的发展,我国经济 ...

  10. linux批量修改文件中包含字符串的查找替换

    find -name "*.env" | xargs perl -pi -e 's|\babcdefg\b|hahaha|g' .env 文件中abcdef 改为hahaha