JavaScript中“基本类型”之争小结


Posted in Javascript onJanuary 03, 2013

前端面试中常被问到的问题之一就是“JavaScript的基本类型有几种?”。

有的回答“数字、字符串、布尔”,有的可能会再加上“Null、Undefined”。而有人可能认为“object”也是基本类型。到底是什么样呢?

所谓“基本类型(primitive types)”的概念ECMAScript(V3,V5)中压根就没有,它只是将类型分为6种。

JavaScript中“基本类型”之争小结

ECMAScript只提到类型,用types表示,在V3,V5整个文档搜关键字“primitive”也没见“primitive type”,“primitive value”倒是有,如true/false/0-9等。这说明规范压根就没有所谓的“基本类型”、“原始类型”一说(primitive types)。如果非要说有那么object明显也是,即有6种基本类型。

一些书籍却经常使用这个概念,如《JavaScript高级程序设计》第一版、第二版,第三版。

第一版提到有5种原始类型,即Undefined、Null、Boolean、Number、String

JavaScript中“基本类型”之争小结

第二版和第三版又搞出了个simple data type,翻译为简单数据类型(也称为基本数据类型),称对象为复杂数据类型。

JavaScript中“基本类型”之争小结

另一本经典书《JavaScript权威指南(第6版)》第3章也提到了primitive types

JavaScript中“基本类型”之争小结

先分为基本类型(primitive types)和对象类型,基本类型又分为数字,字符串,布尔,及两个特殊null,undefined。

5年前JavaScript方面的书籍还很少,这两本书就是其中之二,影响也很大,可谓经典。因此受此影响的JSer不乏少数。我想书作者把语言类型分为基本类型(元类型)和对象类型(复杂类型)也是符合学习逻辑的,复杂类型由简单类型组合而成。另外也是受到其它语言如Java的影响,它们也是把类型分为基本类型(8种)和对象类型。

但ECMAScript中没有所谓的primitive types,就好比它没有类(class)的概念一样(具有其它语言能力的人仍然喜欢在JavaScript使用名词“类”)。它里面提到的就是类型,可以把它理解成基本类型,但也应该是6种。这里的基本类型也不是Java中的基本类型,因为它包含了复杂数据类型-对象。

不是所有的书都认为JavaScript中基本类型只有5种(不包括对象),《JavaScript语言精髓与编程实践》认为是6种,如下

JavaScript中“基本类型”之争小结

它没有将null归为其中,却增加了function类型。 噢,千奇百怪的答案都有,下次再有人问这个问题如何作答呢?

Javascript 相关文章推荐
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
Jul 31 Javascript
jquery下checked取值问题的解决方法
Aug 09 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 Javascript
一个简单的jquery进度条示例
Apr 28 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
JavaScrpt的面向对象全面解析
May 09 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 Javascript
小程序实现筛子抽奖
May 26 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 #Javascript
javascript学习(二)javascript常见问题总结
Jan 02 #Javascript
javascript学习(一)构建自己的JS库
Jan 02 #Javascript
jQuery常见开发技巧详细整理
Jan 02 #Javascript
js显示时间 js显示最后修改时间
Jan 02 #Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
Jan 02 #Javascript
js 回车提交表单两种实现方法
Dec 31 #Javascript
You might like
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
PHP中header用法小结
2016/05/23 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
php头像上传预览实例代码
2017/05/02 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
js实现简单的打印表格
2020/01/15 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
Python中生成ndarray实例讲解
2021/02/22 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
导游词之镇江-金山寺
2019/10/14 职场文书
python中tkinter复选框使用操作
2021/11/11 Python