javascript 六种数据类型(一)

js的数据类型和常见隐式转化逻辑。javascript

1、六种数据类型

原始类型(基本类型):按值访问,能够操做保存在变量中实际的值。原始类型汇总中null和undefined比较特殊。html

引用类型:引用类型的值是保存在内存中的对象。java

* 与其余语言不一样的是,JavaScript不容许直接访问内存中的位置,也就是说不能直接操做对象的内存空间。在操做对象时,其实是在操做对象的引用而不是实际的对象。因此引用类型的值是按引用访问的。数组

2、隐式转换

一、+和-

巧用+和-规则转换类型app

把变量转换成数字:num-0;函数

把变量转换成字符串:num+'';学习

二、a==b

类型相同,同===网站

类型不一样,尝试类型转换和比较:spa

三、a===b

类型不一样,返回falseprototype

类型相同:

3、包装对象

基本类型中的number,string和boolean都有对应的包装类型。

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

str,number和true都有包装类型,因此能够把数字用括号括起来调用toString()方法

4、类型检测

javascript中类型检测方法有不少:

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

一、typeof

最多见的就是typeof:

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

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

typeof对基本类型和函数对象很方便,可是其余类型就没办法了。

判断一个对象是否是数组?用typeof返回“object”。对对象的判断经常使用instanceof。

二、instanceof

基于原型链操做。obj instanceof Object

左操做数为对象,不是就返回false,右操做数必须是函数对象或者函数构造器,不是就返回typeError异常。

原理:判断左边的左操做数对象原型链上是否有右边这个构造函数的prototype属性

 任何一个构造函数都有一个prototype对象属性,这个对象属性将用做new出来的对象的原型。

bosn instanceof Person的时候发现bosn的原型也就是Student.prototype不等于Person.prototype,因此原型链还会向上查找,bosn的原型的原型等于Person.prototype因此返回true。

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

instanceof不一样window或iframe之间的对象类型检测不能使用instanceof!

三、Object.prototype.toString

须要注意的是IE6/7/8中 Object.prototype.toString.apply(null)返回“[object Object]”。

四、constructor

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

constructor能够被改写,因此使用要当心。

五、duck type

 好比不知道一个对象是否是数组,能够判断它的length是否是数字,它是否是有join,push这样一些数组的方法。经过一些特征判断对象是否属于某些类型,这个有时候也经常使用。

 

总结:

六、如何检测一个变量是字符串

有另一种方法:将变量和空字符拼接后再和原来变量作全等判断

var str="hello";
var temp=str+'';
temp===str
//true

 

 

 

 本文做者starof,因知识自己在变化,做者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6368048.html有问题欢迎与我讨论,共同进步。

相关文章
相关标签/搜索