对于前端的小伙伴而言,JS的数据类型可谓是必懂的知识点。虽然这个知识点很是基础了,不过仍然有不少人会在这一块犯些小错误。比如网上流传的“JavaScriptS一切皆对象”,其实是个很不严谨的说法,JS中只有部分数据类型是对象;再比如有小伙伴面试回答“JS的数据类型有哪些”这类问题时,给出的答案中竟然还包含了array、function。本文就是针对JavaScript中的数据类型,做一个详细的汇总。
JavaScript中的数据类型到底有哪些
至ES6为止,JavaScript共有七种数据类型:Number、String、Boolean、Undefined、Null、Object、Symbol。其中,Number、String、Boolean、Undefined、Null、Symbol属于简单数据类型(也称基本数据类型),Objec则属于复杂数据类型,同时Symbol则是ES6新出的数据类型
1、Number
在JS中,Number这种数据类型使用IEEE754的格式来表示整数和浮点数值,而ECMA定义了不同的数值字面量格式
- 整数和小数:
1 1.1 .1 - 科学记数法:
1.23e2 - 二进制:
0b11 - 八进制:
011(后来 ES5 添加了 0o11 语法) - 十六进制:
0x11 - 特殊数值:
NaN(Not a Number,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况)
2、String
String类型用于表示由0个或多个16位的Unicode字符组成的字符序串,字符串可以由双引号"或者单引号'表示
- 空字符串:
'' - 单行字符串:
var s = '12345' - 多行字符串:
var s = '12345' +
'67890' // 无回车符号
或
var s = `12345
67890` // 含回车符号
3、Boolean
Boolean这种数据类型只有两个取值:true和false
a && b在 a 和 b 都为 true 时,取值为 true;否则为 falsea || b在 a 和 b 都为 false 时,取值为 false;否则为 true
4、 Undefined
Undefined这种数据类型只有一个取值,即:undefined。在使用var声明变量但未对变量加以初始化时,这个变量的值就是undefined
5、Null
同Undefined数据类型一样,Null这种数据类型也只有一个取值null,如果定义的变量准备在将来用来保存对象,那么最合适的做法就是将这个变量初始化为null,比如:
var person = null
person = {name:'wjm',gender:'male'}
6、Object
Object之所以被称为复杂数据类型,就是因为其本质上就是由前面的一种或多种基本数据类型(无序地)组合在一起而形成的数据
- object 的 key 一律是字符串,不存在其他类型的 key
- object[''] 是合法的,因为空字符串也是个String数据类型的值
- object['key'] 可以写作 object.key
- 注意 object.key 与 object[key] 不同
- object 里面可以有 object、array、function
var person = {
name: 'Frank',
'child': {
name: 'Jack'
},
like: ['font','teach'],
walk: function(){},// 最后这个逗号可有可无
}
- object中的属性可以用
delete操作符删除:delete object['name'] - 一般来说,object的属性可以用
for-in语句来枚举,值得注意的是,JS对象的属性没有顺序,因此,通过for-in循环出的属性名是无序的
for(var propName in object) {
console.log(object[propName])
}
7、Symbol
Symbol 是ES6所支持的一种新的数据类型,使用Symbol 能够生成一个全局唯一的值,如下:
var a1 = Symbol('a')
var a2 = Symbol('a')
a1 !== a2 // true
一般来说,Symbol这种数据类型,主要有以下作用:
- 作为对象属性名避免属性名冲突
- 替代代码中多次使用的字符串(例如:abc),多次使用的字符串在代码中不易维护,而这时候定义一个对象的属性(属性名用Symbol格式),值为abc,就可以作为全局变量来使用了
- 由于以Symbol值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法
- 如果我们希望重新使用同一个Symbol值,Symbol.for方法可以做到这一点。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值
以上理解,参考了阮一峰的ECMAScript 6入门
所以JavaScript中的数据类型到底有哪些,至此已经很明朗清晰了,请随我再回忆一遍:Number、String、Boolean、Undefined、Null、Object、Symbol。然后,不要再弄错了哟!
如果这篇文章对你有帮助,可以的话,不妨点个喜欢呢