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 相关文章推荐
来自chinaz的ajax获取评论代码
May 03 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
js时间日期和毫秒的相互转换
Feb 22 Javascript
JS上传前预览图片实例
Mar 25 Javascript
基于js disabled="false"不起作用的解决办法
Jun 26 Javascript
JavaScript调试工具汇总
Dec 23 Javascript
JavaScript插件化开发教程 (四)
Jan 27 Javascript
json传值以及ajax接收详解
May 24 Javascript
AngularJS通过$sce输出html的方法
Sep 22 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
Weex开发之地图篇的具体使用
Oct 16 Javascript
JavaScript实现轮播图特效
Apr 10 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
Vue实现购物车功能
2017/04/27 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
Python实现大文件排序的方法
2015/07/10 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python批量创建指定名称的文件夹
2019/03/21 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python调用webservice接口的实现
2019/07/12 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
python3实现绘制二维点图
2019/12/04 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
tensorflow 查看梯度方式
2020/02/04 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
爱祖国演讲稿
2014/05/04 职场文书
《失物招领》教学反思
2016/02/20 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android