JavaScript 数据类型
根据[ECMA-262]的定义,JavaScript共有七种数据类型:
Undefined、Null、Boolean、String、Symbol、Number、Object。
注意:数组和函数都不是数据类型,他们是一种特殊的Object
JavaScript是一种弱类型语言。程序在变量赋值时,JavaScript引擎会自动对值进行判断并设定类型。
七种数据类型介绍
**类型一:**Undefined
Undefined类型的值只有一个:undefined。变量如果声明后未赋值,其值默认等于undefined。
let foo;
typeof foo; // undefined
类型二:Null
Null类型的值只有一个:null,一个表示空的对象。
类型三:Boolean
Boolean类型用于表示一个逻辑实体,包含两个值:true和false。
类型四:String
用于表示由零个或多个由UTF-16编码的字符序列组成的字符串。通常用单引号’'或双引号""包裹来表示。
类型五:Symbol
Symbol类型的值是唯一的且不可更改的。
Symbol类型的值可以作为对象的属性使用,好处是能避免属性名冲突引起的属性覆盖问题。
类型六:Number
Number类型具有18437736874454810627(264-253+3)个值,
表示为双精度64位IEEE 754-2008中的值,采用IEEE标准所指定的二进制浮点数算法。
其中包含三个特殊的值:
正无穷(positive Infinity):+∞。在JS代码中表示为:+Infinity
负无穷 (negative Infinity):-∞。在JS代码中表示为:-Infinity
NAN(Not-a-Number):使用9007199254740990(2^53-2)表示
其余18437736874454810624 (264-253) 个值为有限数(finite numbers),且正负数
对半,即每一个有限正数都对应了一个有限负数。
注:0也是成对出现的。这两个值在程序中被表示为+0 (或0) 和 -0。
类型七:Object
Object类型的值是一些属性的集合。
属性包括属性名和属性值。属性名可以是String类型或Symbol类型,属性值可以是任何数据类型。
let obj = new Object(),
p1 = ‘prop1’,
p2 = new Symbol(‘p2’);
obj[p1] = ‘value1’; //字符串作为属性名
obj[p2] = ‘value2’; //Symbol类型的值作为属性名
使用 typeof 命令判断数据类型
// 判断字符串
typeof ‘hello’ // “string”
// 判断数字
typeof 99 // “number”
// 判断布尔值
typeof true // “boolean”
// 判断对象
typeof {} // “object”
// 判断null
typeof null // “object”
// 判断undefined
typeof undefined // “undefined”
// 判断Symbol值
typeof Symbol(‘hello JS’) // “symbol”
使用typeof判断数据类型并不十分靠谱,比如上面typeof null和typeof {}都返回了"object"。
如果需要判断变量是否为null,应该使用"==="判断:
var foo = null;
typeof foo // “object”
foo === null // true
另外:如果判断变量是否为数组,typeof命令也是不靠谱的,你应该使用Array.isArray()方法判断:
var arr = [1,2,3];
typeof arr // “object”
Array.isArray(arr) // true
上面我们提到数组和函数是一种特殊的Object类型,那是否意味着函数也不能使用typeof判断呢,答案是否定的,typeof对函数进行了"特殊照顾":
var func = function(){
console.log(‘Hello JavaScript’);
};
typeof func // “function”