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. spring boot 文件上传 文件过大 FileUploadBase$SizeLimitExceed

    application.properties中加入 multipart.maxFileSizemultipart.maxRequestSize Spring Boot 1.3.x或者之前 multip ...

  2. Django_xamin注册model错误

    可能出现的错误: 1. xadmin.sites.AlreadyRegistered: The model UserProfile is already registered 2. error:Fie ...

  3. JavaScript数组的22种方法

    原文:http://www.cnblogs.com/xiaohuochai/p/5682621.html javascript中数组的22种方法   前面的话 数组总共有22种方法,本文将其分为对象继 ...

  4. form表单action=""的作用

    看项目时发现action="",可仍旧提交到后台相关页面了.查了一下,action=""相当于当前页面刷新,不过页面按照form表单提交参数到后台@参考文章

  5. 在nagios中使用nrpe自定义脚本

    nrpe的安装    tar xvfz nrpe-2.13.tar.gz cd nrpe-2.13 ./configure make all make install-plugin make inst ...

  6. matlab文件读写处理实例(三)——读取文件特定行

    (1) 读取文件特定行 CODE: ; ;        if nline==line               fprintf(fidout,'%s\n',tline);         data ...

  7. SQL查询系列1---

    1.查询关系为夫妻,年龄相加大于60的信息 表1 信息表 info id 编号   sex 性别 0-女,1-男 age 年龄   表2 关系表 rel id1 编号1 外键 id2 编号2 外键 r ...

  8. 关键字voltale

    ***volatile在多线程用的最多.*** #include<stdio.h> #include<stdlib.h> int main() { ; i < ; i++ ...

  9. git的sshkey生成步骤

    找到git安装的目录,运行"git-bash.exe". 配置git的user的name及email $ git config --global user.name "u ...

  10. Apache 配置SSI速记

    1. 启用模块 httpd.conf LoadModule filter_module modules/mod_filter.so 2. <Directory 的Options配置中增加Incl ...