Javascript Step by Step - 01

基本数据类型

简单数值类型: undefined, null, boolean, number和string,共有5种

复合数据类型:object,array,function

typeof操作符用来确定变量的基本数据类型,它只有六个可能的值:

undefined,boolean,string,number,object和function

也就是说,null和array经过typeof操作后得到的值为object

需要注意以下几点:

  1. 这几个类型的首字母必须小写,如果大写则变为了javascript的内置对象。javascript的内置对象有String,Math,Array,Date,Event等。内置对象都有自己的方法和属性
  2. null的意思是对象是空的,undefined的意思是未声明,或者已经声明但没有赋值,或者函数无明确的返回值。在进行数值运算时,null会转变为0,undefined会转变为NaN。关键在于null并不很特殊,从某种程度上和其他的值完全一样。
  3. 所有object都有一些方法,如hasOwnProperty,isPrototypeOf,toString和valueOf

双等号和三等号

    我觉得这是一个很头疼的问题。在英文里,双等号叫做equality,三等号叫做identity,它们的区别在于双等号要做类型转换,但是三等号直接进行比较。这么说感觉很简单,但是实际比较起来就不那么容易了。

    ===比较时,若要相等,首先两边类型必须相同。然后又几种情况:都是number同值,都是字符串每个位置字符相等,都是true或者false,都引用同一对象或function,都是null或者undefined。

    ==比较时,如果类型相等转入===比较。如果类型不等而满足如下情况,则也算相等。null和undefined比较,字符串和数字比较(字符串转化为数字后两边相等),true和1或者false和0比较,对象和数值或字符串比较(对象调用valueOf或toString后和另一边相等)。说着挺麻烦的,举个例子吧:

true == 1       //true
"2" == 2         //true
false == undefined  // false
false == null       // false
null == undefined   // true
' \t\r\n ' == 0     // true
0 == ""             //true
var a = { x: 1, y: 2 };
var b = { x: 1, y: 2 };
a == b            // false
a === b          //false

    总之一句话,尽量用三等号就行了,要不然会很头疼。

原型链

    Javascript中的每一个function都有一个prototype属性,指向该function的原型对象。默认所有的原型对象都有constructor属性,它始终指向创建当前对象的构造函数。函数的prototype的constructor指向这个函数。

function Person(name) {  
    this.name = name;  
};  
Person.prototype.getName = function() {  
    return this.name;  
};  
var p = new Person("Mike");
p.constructor===Person //true,对象的constructor属性是创建它的构造函数
Person.prototype.construtor==Person //true,函数的prototype属性的constructor属性是它自己  

new Person的过程是这样的:

  1. 初始化一个空的对象,var p={}
  2. p.__proto__=Person.prototype
  3. Person.call(p)

每个对象都有一个__proto__属性,它是一个私有属性,不对外公开,其实他就是构造它的函数的prototype属性。在寻找对象的属性时,首先找他自己的属性,没有的话向__proto__属性中找,如果还没有,就向__proto__.__proto__中去找,。。。这就是原型链。

var Person=function(){};
var Programmer=function(){};
Programmer.prototype=new Person();
var p=new Programmer();

它们之间的关系是,var p1=new Person(), p1.__proto__=Person.prototype, p.__proto__=Programmer.prototype=p1,因此,p.__proto__.__proto=Person.prototype,done!

posted @ 2013-07-10 20:35  cubika  阅读(343)  评论(0编辑  收藏  举报