Javascript中的数据类型有以下几种情况:
基本类型:string,number,boolean
特殊类型:undefined,null
引用类型:Object,Function,Date,Array,RegExp, …
Javascript中的数据类型
有以下几种情况:
- 基本类型:string,number,boolean
- 特殊类型:undefined,null
- 引用类型:Object,Function,Date,Array,RegExp, …
1、string
string类型的数据是由16位Unicode字符组成的字符串,用typeof检测其数据类型如下:
var str = "Hi, Javascript";
console.log(typeof str); // string
在Javascript中,除过undefined和null之外的其他的数据类型都有toString()方法,因此这些数据类型都可以通过
toString
方法转化为对应的string类型
123..toString(); // "123",注意有两个..
true.toString(); // "true"
new Object().toString(); // [object Object]
"Hello".toString(); // "Hello"
undefined.toString(); // Error
null.toString(); // Error
一般情况下,toString不需要传递参数,而将数值转化为字符串时,通过传递一个radix参数,可以将数值转化为对应的二进制、八进制和十六进制的字符串表示。
2、number
在Javascript中,没有int和float数据类型,而是用number
来表示整数和浮点数值,除此之外,number还有一个特殊的数值,即NaN (Not a Number),NaN
表示一个承诺返回数值类型数据但实际没有返回的情况. NaN有两个特点:一是任何涉及NaN的操作都会返回NaN,二是NaN不与任何数值相等,包括自己,但可以通过isNaN()方法来判断一个数值是否为NaN
typeof 123; // "number"
typeof 123.45 // "number"
typeof NaN; // "number"
NaN+1; // NaN
NaN == false; // false
NaN == NaN; //false
isNaN(NaN+1); //true
3、boolean
boolean类型只有两个字面值:true和false 。 但在Javascript中,所有类型的值都可以转化为与boolean等价的值,转化规则如下:
(1)所有对象都被当作 true
(2)当字符串为空时,该字符串被当作false
(3)null 和 undefined 被当作 false
(4)当数字为0时,该数字被当作 false
typeof true; // "boolean"
typeof false; // "boolean"
Boolean(new Object()); //true
Boolean(undefined); //false
Boolean(null); //false
Boolean(''); //false
Boolean(0); //false
Boolean(100); // true
4、undefined
该类型只有一个值,即 undefined。 undefined意为未定义
,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined。undefined产生的原因有两种:
(1)访问对象不存在的属性或方法
(2)声明了变量但从未赋值
var v1,obj = {};
console.log(v1); //undefined
console.log(obj.get); //undefined
typeof v1; // "undefined"
typeof v2; // "undefined"
typeof obj.get; // "undefined"
5、null
null类型也只有一个值:null , 表示一个变量中没有包含有效数据。null在这里意为空值
、空对象
的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。
var p = null;
console.log(p); //null
typeof p ; // "object"
typeof null; // "object"
另外,需要注意的是,typeof null 应该返回null
,但实际上返回的是object
,这是一个历史遗留问题,并没有其他原因。
6、Object,Function,Array,Date,RegExp
这些对象在JS中都属于引用类型, 除Function之外,通过typeof检测其数据类型返回的都是object, 如果要判断对应的具体类型,则可以通过Object.prototype.toString
来获取。
var a = {};
var b = new Function();
var c = [];
var d = new Date();
var e = new RegExp();
typeof a; //object 有效
Object.prototype.toString.call(a); //[object Object]
typeof b; //function 有效
Object.prototype.toString.call(b); //[object Object]
typeof c; //object 无效
Object.prototype.toString.call(c);//[object Array]
typeof d; //object 无效
Object.prototype.toString.call(d);//[object Date]
typeof e; //object 无效
Object.prototype.toString.call(e);//[object RegExp]
另外,ES6中新增了symbol这个类型: typeof Symbol()
本作品采用 知识共享署名 2.5 中国大陆许可协议 进行许可,欢迎转载,但转载请注明来自JayMo,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文永久链接:http://jaymo666.github.io/2017/06/20/JS之数据类型详解/