javascript的数据类型

时间:2021-09-06 14:59:06

一、六种数据类型

javascript的数据类型

 

原始类型(基本类型):按值访问,可以操作保存在变量中实际的值。原始类型汇总中nullundefined比较特殊。

typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function

typeof对基本类型和函数很方便,但是其他类型全部归为object类型

比较特殊的是typeof null返回“object”

1.javascripttypeof返回哪些数据类型

object number function boolean underfind.string

引用类型:引用类型的值是保存在内存中的对象。比如 var arr=new Array()arr是一个引用,它指向一个数组对象。

* 与其他语言不同的是,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。所以引用类型的值是按引用访问的。

 

包装对象

基本类型中的number,stringboolean都有对应的包装类型。也就是引用类型?

 <script type="text/javascript">  

 var a="string";

 a.t=5;

 alert(a.length);//弹出6

 alert(a.t);//弹出undefined

 var str=new String("string");

 

 str.t=3;

 alert(str.length);//弹出6

 alert(str.t);//弹出3

 </script>

说明:把一个基本类型尝试用对象的方式使用它的时候,比如访问length属性,或者增加一些属性的操作时,javascript会把这些基本类型转化为对应的包装类型对象。完成这样一个访问比如a.length返回以后或者a.t设置了以后,这个临时对象会被销毁掉。所以a.t赋值3了以后,再去输出a.t值是undefined

但如果使用对象的方式去访问str.length或者设置str.t了之后,再去访问的时候,可以输出这个值。

stringnumberboolean都有包装类型,所以可以把数字用括号括起来调用toString()方法

 

四、类型检测

javascript中类型检测方法有很多:

  • typeof
  • instanceof
  • Object.prototype.toString
  • constructor
  • duck type

最常见的就是typeof:

 javascript的数据类型

比较特殊的是typeof null返回“object”

历史原因,规范尝试修改typeof null返回“null”修改完大量网站无法访问,为了兼容,或者说历史原因返回"object"

typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,functiontypeof对基本类型和函数很方便,但是其他类型就没办法了。

1.javascript的typeof返回哪些数据类型

object number function boolean underfind.string

 

判断一个对象是不是数组对象?用typeof返回“object”

instanceof只能用来判断对象和函数,不能用来判断字符串和数字等返回的是一个布尔值instanceof是检测左边对象的原型链是否指向右边构造函数的prototype属性的,所以我们也可以用它来判断:

ar b = '123';

alert(b instanceof String);  //false,instanceof无法判断字符串

alert(typeof b);  //string,tpyeof返回变量的基本数据类型

var c = new String("123");

alert(c instanceof String);  //true,instanceof可判断对象

alert(typeof c);  //object,typeof判断对象时都返回object

var arr = [1,2,3];

alert(arr instanceof Array);   // true

instanceof在判断对象是不是数组对象ArrayData,正则等时很好用。

instanceof不同windowiframe之间的对象类型检测不能使用instanceof

除了instanceof来判断数组之外,还有就是数组对象的arr.constructor属性。

在默认情况下,所有原型对象会自动包含一个constructor属性,该属性也是一个指针,指向prototype所在的函数.这个属性在我们使用js系统或者自己创建的对象的时候,会默认的加上.

任何对象都有constructor属性,继承自原型的,constructor会指向构造这个对象的构造器或者构造函数。

constructor可以被改写,所以使用要小心。

 

var arr = [1,2,3];  //创建一个数组对象

alert(arr.constructor === Array);   // true