javaScript基础概念整理1(数据类型)

来源:互联网 发布:陕师大网络教育平台 编辑:程序博客网 时间:2024/06/03 22:41

一、六钟数据类型(js:弱类型特性

五种原始类型:

1.number

2.string 

3.boolean

4.null

5.undefined

一种对象类型:

object(对象)--包括:Function,Array,Date等

二、隐式转换("==="和"==")

1."==="

   首先判断等号两侧的类型,若类型不同,直接返回false

   若类型相同,对于特殊的几个类型:

   null===null

   undefined===undefined

   NaN!=NaN //NaN和任何东西都不相等

   new Object!=new Object  //对象比较的是引用(地址),不是值

2."=="

   若类型相同,同1,正常比较

   若类型不同(对应等号两侧的两种类型的变量作比较):

   null==undefined

   number==string //1=="1.0" true

   boolean==?  //先把boolean值转化为number(0或1),再与等号右侧的值比较

   object==number或string  //将对象类型转化为基本类型(如果可以),再作比较

三、包装对象(number,string,boolean具有包装类型)

eg:

var str = "string";//str--string类型

alert(str.length);//可以得到长度为6

str.t=10;//给str添加t属性,并赋值为10

alert(str.t);//str.t--undefined类型(正常应该是number类型,因为赋值为10)

注:

str.length和str.t时,js自动将str转化为对应的包装类的对象,相当于new了一个String的临时对象,并赋值为str的值。但是,赋值过后,临时对象即被销毁,因此,str.t=10后,str.t类型为undefined。

四、类型检测

1.typeof(适合基本类型及function检测)

eg:

typeof 100 //number

typeof function //function

typeof [1,2] //object

typeof date //object

typeof new Object //object

typeof NaN //number(特殊的number类型)

typeof null //object !!特殊,注意

typeof undefined //undefined

2.instanceof(判断对象类型,基于原型链判断的操作符)

obj instanceof Object

obj:一个对象(若不是,直接返回false),Object是一个函数对象(或函数构造器,若不是,抛出typeError异常)

eg:

[1,2] instanceof Array === true

new Object() instanceof Array === false

注:

不同window或iframe间的对象检测不能用instanceof!

3.Object.prototype.toString(一个方法,用来判断类型)

eg:

Object.prototype.toString.apply([]);==="[Object Array]";

Object.prototype.toString.apply(function(){});==="[Object Function]";

Object.prototype.toString.apply(null);==="[Object Null]"; //IE6,7,8,返回的还是Object(null的历史问题)

4.其他(constructor,duck type)

任何一个对象都有一个constructor属性,用来继承自己的原型

(Student.prototype.constructor = Student)   

duck type:通过对象是否具有某种特征,来判断该对象的类型(如:数组具有长度特征)


附:

深入分析constructor和prototype:

(1)prototype

我们在定义函数的时候,函数本身就会默认有一个prototype的属性,而如果我们用new 运算符来生成一个对象的时候就没有prototype属性。

例如:

function a(c){    this.b = c;    this.d =function(){        alert(this.b);    }}var obj = new a('test');alert(typeof obj.prototype);//undefinealert(typeof a.prototype);//object
其中:a.prototype是object类型,可以理解为,a.prototype又是一个对象。

      而a.prototype包含了两个属性(对象都有这两个属性,但new生成的对象没有prototype属性):

      一个是constructor,一个是_proto_。

      这个constructor,就是我们的构造函数a。

      那么__proto__ 是什么呢?这个就涉及到了原型链的概念:

      每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性时,如果这个对象内部       不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这       样一直找下去。

      本例中,obj.__proto__ = a.prototype


0 0
原创粉丝点击