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 相关文章推荐
Prototype使用指南之selector.js
Jan 10 Javascript
JavaScript中window、doucment、body的解释
Aug 14 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
Oct 20 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
JQuery实现DIV其他动画效果的简单实例
Sep 18 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 Javascript
vue router 传参获取不到的解决方式
Nov 13 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
vue excel上传预览和table内容下载到excel文件中
Dec 10 Javascript
基于JS实现table导出Excel并保留样式
May 19 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中对用户身份认证实现两种方法
2011/06/04 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
node 版本切换的实现
2020/02/02 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
PyTorch中的Variable变量详解
2020/01/07 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
KTV员工管理制度
2015/08/06 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书