你不知道的JavaScript之类型
JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握。
《你不知道的JavaScript》中是这样定义类型的:
类型是值的内部特征,它定义了值的行为,以使其区别于其他值。
这样的定义可能略简单了一些,不够已经足够让我们去理解类型的含义。
不得不提的强制类型转换
在JavaScript中,强制类型转换无处不在,在我们的程序中,有意无意地,都经常地利用到强制类型转换。它给我们带来了许多便利,同时也容易造成某一些坑。当然了,之所以造成坑,也主要就是因为对类型的了解不够。所以,我们十分有必要学习一些关于类型的细节。
内置类型
JavaScript有7种内置类型,分别是:
- 空值,null
- 未定义,undefined
- 布尔值,boolean
- 数字,number
- 字符串,string
- 对象,object
- 符号,symbol(ES6中新增的)
这其中,除了对象以外的统称为基本类型。
typeof null === "object"
出乎意料的,这条语句是true,即用typeof去判断null的类型,得到的是object,这是一个由来已久的bug。修复它可能会导致许多现存系统的崩溃,所以这个bug也许会一直存在。
值和类型
首先JavaScript不同于C++等的编程语言,JavaScript中的变量是无类型的,一个变量可以持有任何类型的值。对一个变量使用typeof操作,返回的也是变量持有的值的类型。
undefined
关于undefined,是挺纠结的...
考虑以下三种情况:
- 声明一个变量却不赋值的话,typeof操作返回的值是undefined。
- 如果去typeof一个未声明的变量,不会报错,返回的同样是undefined。
- 使用一个未声明的变量a,会报错a is not defined.
值得注意的是,undefined和not defined看上去很相似,其实是不同的,其实not defined用undeclared来表示会减少许多误解。
不过,上述情况中的第二条的原理,也被称作typeof的安全防范机制,有时候也被用来检查未声明的变量。因为这样不会报错,某些情况下很有用。
你不知道的JavaScript之类型的更多相关文章
- 《你不知道的JavaScript》整理(二)——this
最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...
- 《你不知道的JavaScript》整理(一)——作用域、提升与闭包
最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,里面分析了很多基础性的概念. 可以更全面深入的理解JavaScript深层面的知识点. 一.函数作用域 ...
- 你不知道的Javascript(上卷)读书笔记之一 ---- 作用域
你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些"坑",在这里写一些博客记录一下笔记以便消化吸收. 1 编译原理 在此 ...
- 你不知道的JavaScript上卷笔记
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章 初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...
- 【读书笔记】-- 你不知道的JavaScript
<你不知道的JavaScript>是一个不错的JavaScript系列书,书名可能有些标题党的意思,但实符其名,很多地方会让你有耳目一新的感觉. 1.typeof null === &qu ...
- 读书笔记-你不知道的JavaScript(上)
本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...
- 读《你不知道的JavaScript(上卷)》后感-作用域闭包(二)
github原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们, ...
- 你不知道的javaScript上卷(第一章 作用域是什么)
在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...
- JavaScript中的this(你不知道的JavaScript)
JavaScript中的this,刚接触JavaScript时大家都在大肆渲染说其多么多么的灵巧重要,然而自己并不关心:随着自己对JavaScript一步步深入了解,突然恍然大悟,原来它真的很重要!所 ...
随机推荐
- 爬虫_网页url设计
为什么需要网页URL设计? 每个url不同的结构代表着不同的网页模块和信息的展现形式,为了方便维护与管理 网页url怎么设计? 分层: 主域名,子域名 一般形式为: 主域名: www.job.com ...
- Java进阶篇(六)——Swing程序设计(下)
三.布局管理器 Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布 ...
- j2e应用概述
过年也过完了,现在正式开始进入j2e的整理.现在开篇第一篇,整理一下j2e应用和开发环境.j2e应用提供的跨平台性,开放性已经各种远程访问的技术,为异构系统的良好整合提供了保证.注意这个是有一个异构系 ...
- finally中关闭资源
对finally中关闭资源是否还要使用try...catch老是感到迷惑,现在存个例子,省的忘了 public StringBuilder readTxtFile(File file){ String ...
- docker入门(二)容器与镜像的理解
10张图带你深入理解Docker容器和镜像 申明:此篇文章是转载的(原文地址http://dockone.io/article/783),今天意外发现已经有人转载了(复制了),希望大家关注原创 原本打 ...
- bzoj1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MB Description 在国际象棋和中国象棋中,马的移动规则相同,都是走&q ...
- 20_Python字典总结
字典: python内置了字典:dic全称dictionary.其他语言中成为map,使用key-value的存储,键-值.具有极快的查找速度类似与我们查字典,我们要查一个字1.从第一页往后翻,知道翻 ...
- python unicode 字节串转成中文问题
字符串:s = r"\u65b0\u6d6a\u5fae\u535a\u6ce8\u518c" 转换为中文:s = s.decode("unicode_escape&qu ...
- jquery 中json数组的操作 增删改
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- bzoj 4033: [HAOI2015]树上染色 [树形DP]
4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...