js数据类型
一、结论:
在js中的数据类型有:
原始数据类型:
Undefined,Null,Boolean,Number、String、Symbol(ECMAScript 6 新增)
引用数据类型:
Object (函数function,对象、数组,正则、Data等等非原始数据类型的都属于引用数据类型Object)
typeof对应的返回值:
原始数据类型除了null返回"object"其余都返回对应的小写字符串
引用数据类型除了function返回function其余都返回"object"

注意:
1.typeof的返回值均为小写
2.String类型和String构造函数要分清,'str’是String类型的数据,new String()是个object,new String()中的String是个构造函数!
以下是我对不同的数据进行typeof得出的:
//注释为结果
注释下方为typeof的数据
/* */注释为解释
//string
'' /*空字符串*/
'str' /*普通字符串*/
//boolean
true
//number
3
NaN /*NaN的数据类型是Number*/
//object
null /*实际上null的数据类型是Null*/
/*为什么typeof null返回object呢?*/
/*最下方有详细解释*/
{}
[] /*其他所有非基本数据类型都是Object类型*/
new RegExp()/*包括Array、RegExp、Data、Math等等*/
//undefined
undefined /*undefined的数据类型是undefined*/
//function
function demo(){}
Object/*注意往下三个均为构造函数,所以他们是Fucntion object类型*/
String/*所以typeof返回的是function*/
Number
二、代码:
<script>
//string
console.log("typeof '':"+typeof '');
console.log("typeof 'str':"+typeof 'str');
//boolean
console.log("typeof true:"+typeof true);
//number
console.log("typeof 3:"+typeof 3);
console.log("typeof NaN:"+typeof NaN);
//Object
console.log("typeof null:"+typeof null);
console.log("typeof {}:"+typeof {});
console.log("typeof []:"+typeof []);
console.log("typeof new Object():"+typeof new Object());
console.log("typeof new String():"+typeof new String());
console.log("typeof new Number():"+typeof new Number());
console.log("typeof new RegExp():"+typeof new RegExp());
//undefined
console.log("typeof undefined:"+typeof undefined);
//function
console.log("typeof function demo(){}:"+typeof function demo(){});
console.log("typeof Object:"+typeof Object);
console.log("typeof String:"+typeof String);
console.log("typeof Number:"+typeof Number);
</script>
三、输出结果:

四、为什么typeof null返回的是object?
原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型, null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“ object ”。
这个bug是第一版Javascript留下来的。在这个版本,数值是以32字节存储的,由标志位(1~3个字节)和数值组成。标志位存储的是低位的数据。这里有五种标志位:
000:对象,数据是对象的应用。
1:整型,数据是31位带符号整数。
010:双精度类型,数据是双精度数字。
100:字符串,数据是字符串。
110:布尔类型,数据是布尔值。
最低位有一位,那么标志位只有一个1字节长度;或者是零位,标志位有3个字节长度,多出两个了字节,一共多出四种类型。
更详细内容可参考此文:
http://www.cnblogs.com/xiaoheimiaoer/p/4572558.html

本文探讨JavaScript中的数据类型,包括原始数据类型(Undefined, Null, Boolean, Number, String, Symbol)和引用数据类型(Object)。重点解析typeof操作符的行为,特别是为何typeof null返回'object'。文章通过代码示例和原理分析,揭示了这一历史遗留问题的原因。"
119554930,10542987,VBScript 读写服务器文本文件教程,"['VBScript', '文件操作', '服务器', '文本处理']
2778

被折叠的 条评论
为什么被折叠?



