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 相关文章推荐
JS实现浏览器菜单命令
Sep 05 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
浅析Ajax语法
Dec 05 Javascript
详解js前端代码异常监控
Jan 11 Javascript
微信小程序--组件(swiper)详细介绍
Jun 13 Javascript
详解Vue Elememt-UI构建管理后台
Feb 27 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
js实现web调用摄像头 js截取视频画面
Apr 21 Javascript
JS中==、===你分清楚了吗
Mar 04 Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 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中处理模拟rewrite 效果
2006/12/09 PHP
php 中文和编码判断代码
2010/05/16 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
js 函数调用模式小结
2011/12/26 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
Python中decorator使用实例
2015/04/14 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
python去除字符串中的换行符
2017/10/11 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
见习期自我鉴定
2014/01/31 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
主婚人致辞精选
2015/07/28 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书