一、六种数据类型

原始类型(基本类型):按值访问,可以操作保存在变量中实际的值。原始类型汇总中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:

比较特殊的是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

前几日看到一个比较熟悉的面试题,判断一个变量是不是数组?
以下几种方法供参考:

var arr = [1, 2, 3]
Array.isArray(arr)
arr instanceof Array
arr.constructor === Array
Object.prototype.toString.call(arr) === '[object Array]'
...

更多相关文章

  1. javascripterror 为空或不是对象.
  2. JavaScript中的数学对象中的方法
  3. JavaScript中的类型转换(一)
  4. Javascript知识汇总------面向对象中继承(未完成)
  5. JS面向对象写法
  6. JavaScript 对象及初识面向对象
  7. 第三节(JavaScript 对象、日期,函数)
  8. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,
  9. JavaScript 基础回顾——对象

随机推荐

  1. 视频教程-Android(安卓)IM 即时通讯实战
  2. Android 待机时间
  3. Android应用程序框架
  4. android:text 文字阴影设置
  5. Xamarin C# Android for Windows 安装
  6. Ubuntu下编译android的linux内核
  7. Android的四大组件
  8. Android(安卓)的Bitmap的修改方法
  9. [Android]【安卓】开发小结
  10. 诡异特殊的EditText 弹出软键盘遮挡BUG