一、六种数据类型
原始类型(基本类型):按值访问,可以操作保存在变量中实际的值。原始类型汇总中null和undefined比较特殊。
typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function;
typeof对基本类型和函数很方便,但是其他类型全部归为object类型。
比较特殊的是typeof null也返回“object”。
1.javascript的typeof返回哪些数据类型
object number function boolean underfind.string
引用类型:引用类型的值是保存在内存中的对象。比如 var arr=new Array(),arr是一个引用,它指向一个数组对象。
* 与其他语言不同的是,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。所以引用类型的值是按引用访问的。
二包装对象
基本类型中的number,string和boolean都有对应的包装类型。也就是引用类型?
<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了之后,再去访问的时候,可以输出这个值。
string,number和boolean都有包装类型,所以可以把数字用括号括起来调用toString()方法。
四、类型检测
javascript中类型检测方法有很多:
- typeof
- instanceof
- Object.prototype.toString
- constructor
- duck type
最常见的就是typeof:
比较特殊的是typeof null返回“object”。
历史原因,规范尝试修改typeof null返回“null”修改完大量网站无法访问,为了兼容,或者说历史原因返回"object"。
typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function;typeof对基本类型和函数很方便,但是其他类型就没办法了。
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在判断对象是不是数组对象Array,Data,正则等时很好用。
instanceof坑:不同window或iframe之间的对象类型检测不能使用instanceof!
除了instanceof来判断数组之外,还有就是数组对象的arr.constructor属性。
在默认情况下,所有原型对象会自动包含一个constructor属性,该属性也是一个指针,指向prototype所在的函数.这个属性在我们使用js系统或者自己创建的对象的时候,会默认的加上.
任何对象都有constructor属性,继承自原型的,constructor会指向构造这个对象的构造器或者构造函数。
constructor可以被改写,所以使用要小心。
var arr = [1,2,3]; //创建一个数组对象
alert(arr.constructor === Array); // true