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 相关文章推荐
JavaScipt基本教程之前言
Jan 16 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
Sep 09 Javascript
js 轮播效果实例分享
Dec 28 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
详解webpack 热更新优化
Sep 13 Javascript
Angular实现svg和png图片下载实现
May 05 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 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计算加权平均数的方法
2015/07/16 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
Python脚本暴力破解栅栏密码
2015/10/19 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
Servlet面试题库
2015/07/18 面试题
《都江堰》教学反思
2014/02/07 职场文书
中班开学寄语
2014/04/04 职场文书
食堂标语大全
2014/06/11 职场文书
总经理司机岗位职责
2015/04/10 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android