JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握。

《你不知道的JavaScript》中是这样定义类型的:

类型是值的内部特征,它定义了值的行为,以使其区别于其他值。

这样的定义可能略简单了一些,不够已经足够让我们去理解类型的含义。

不得不提的强制类型转换

在JavaScript中,强制类型转换无处不在,在我们的程序中,有意无意地,都经常地利用到强制类型转换。它给我们带来了许多便利,同时也容易造成某一些坑。当然了,之所以造成坑,也主要就是因为对类型的了解不够。所以,我们十分有必要学习一些关于类型的细节。

内置类型

JavaScript有7种内置类型,分别是:

  1. 空值,null
  2. 未定义,undefined
  3. 布尔值,boolean
  4. 数字,number
  5. 字符串,string
  6. 对象,object
  7. 符号,symbol(ES6中新增的)

这其中,除了对象以外的统称为基本类型。

typeof null === "object"

出乎意料的,这条语句是true,即用typeof去判断null的类型,得到的是object,这是一个由来已久的bug。修复它可能会导致许多现存系统的崩溃,所以这个bug也许会一直存在。

值和类型

首先JavaScript不同于C++等的编程语言,JavaScript中的变量是无类型的,一个变量可以持有任何类型的值。对一个变量使用typeof操作,返回的也是变量持有的值的类型。

undefined

关于undefined,是挺纠结的...

考虑以下三种情况:

  1. 声明一个变量却不赋值的话,typeof操作返回的值是undefined。
  2. 如果去typeof一个未声明的变量,不会报错,返回的同样是undefined。
  3. 使用一个未声明的变量a,会报错a is not defined.

值得注意的是,undefined和not defined看上去很相似,其实是不同的,其实not defined用undeclared来表示会减少许多误解。

不过,上述情况中的第二条的原理,也被称作typeof的安全防范机制,有时候也被用来检查未声明的变量。因为这样不会报错,某些情况下很有用。

你不知道的JavaScript之类型的更多相关文章

  1. 《你不知道的JavaScript》整理(二)——this

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...

  2. 《你不知道的JavaScript》整理(一)——作用域、提升与闭包

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,里面分析了很多基础性的概念. 可以更全面深入的理解JavaScript深层面的知识点. 一.函数作用域 ...

  3. 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域

    你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...

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

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

  5. 【读书笔记】-- 你不知道的JavaScript

    <你不知道的JavaScript>是一个不错的JavaScript系列书,书名可能有些标题党的意思,但实符其名,很多地方会让你有耳目一新的感觉. 1.typeof null === &qu ...

  6. 读书笔记-你不知道的JavaScript(上)

    本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...

  7. 读《你不知道的JavaScript(上卷)》后感-作用域闭包(二)

    github原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们, ...

  8. 你不知道的javaScript上卷(第一章 作用域是什么)

    在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...

  9. JavaScript中的this(你不知道的JavaScript)

    JavaScript中的this,刚接触JavaScript时大家都在大肆渲染说其多么多么的灵巧重要,然而自己并不关心:随着自己对JavaScript一步步深入了解,突然恍然大悟,原来它真的很重要!所 ...

随机推荐

  1. JavaScript ES6 Arrow Functions(箭头函数)

    1. 介绍 第一眼看到ES6新增加的 arrow function 时,感觉非常像 lambda 表达式. 那么arrow function是干什么的呢?可以看作为匿名函数的简写方式. 如: var ...

  2. iOS学习——获取当前最顶层的ViewController

    在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertCo ...

  3. 基于Elasticsearch搜索平台设计

    背景 随着公司业务的高速发展以及数据爆炸式的增长,当前公司各产线都有关于搜索方面的需求,但是以前的搜索服务系统由于架构与业务上的设计,不能很好的满足各个业务线的期望,主要体现下面三个问题: 不能支持对 ...

  4. OkHttp实现全局过期token自动刷新

    #遇到问题: 当前开发的 App 遇到一个问题: 当请求某个接口时,由于 token 已经失效,所以接口会报错.但是产品经理希望 app 能够马上刷新 token ,然后重复请求刚才那个接口,这个过程 ...

  5. js给页面添加滚动事件并判断滚动方向

    <script> var scrollFunc = function (e) { var direct = 0; e = e || window.event; if (e.wheelDel ...

  6. 在nagios中监控windows主机系统地址的状态

    原来的[root@nhserver2_5 objects]# cd /usr/local/nagios/etc/objects[root@nhserver2_5 objects]# vim comma ...

  7. window对象的属性

    还不是很了解,以后补充frames      opener       parent

  8. strcpy和memcpy

    切记,memcpy的头文件是memory.hstrcpy和memcpy主要有以下3方面的区别.1.复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组.整型.结构体 ...

  9. 异常检测算法:Isolation Forest

    iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...

  10. apr-util的安装

    下载软件 下载链接: http://pan.baidu.com/s/1o6sOwgM http://pan.baidu.com/s/1hqIdcA4 ########安装apr######### ta ...