Javascript高级编程所要理解的

自我感觉很重要的知识点整理了下,了解了这个以后,对javascript的程序就理解更加深入了,参考书籍 javascript权威指南(犀牛皮) Javascript高级程序设计

2.关于关联数组的对象和数组的区别
关联数组的对象有两种访问属性的方法:
obj.prop
obj["prop"]
这两种访问方式,javascript是一种松类型的语言,属性是可以动态添加的,访问的话只能通过obj["prop"]来访问,不能通过obj[0]来访问,除非是专门有定义了obj[0]=1,这样的,那么这个时候就可以通过obj[0]来访问到1了,否则只能通过属性字符串做下标访问,不能通过数字。所以说虽然对象有关联数组的特征,但并不等同于它就是数组。
 数组的声明通过
var arr=new Array;
var arr=new Array(10);
var arr=new Array(1,2);
类似于上面一样的声明,访问方式,直接通过arr[0] arr[1] 这样来访问

 

3.对象直接量
对象直接量提供了另一种创建并初始化新对象的方式
比如:
var circle={x:0,y:0};
这种声明方式,其实就等于
var circle=new Object();
circle.x=0;//circle["x"]=0
circle.y=0;//circle["y"]=0

 

4.关于构造函数
构造函数其实是在对象已经被建立的情况下,才被触发的,有一个对象叫调用对象,这个对象就是那个调用这个函数的对象,因此这个时候this就是指这个对象。
var circle=new Object;可以这样实例化一个对象。

 

5.Window对象是顶层对象
它自己有一个属性window可以用来引用自己的其他属性的,当声明一个function aa(){}函数时候,如果没将其赋给其他属性,那么就会默认赋给顶层对象Window new 出来的对象了。
比如
function aa(){
       
}
aa();//window.aa() 这两个是一样的效果

 

6.typeof
对变量或值调用typeof运算符将返回下列值之一
“undefined”,如果变量是Undefine型的,也就是变量既没赋任何初始值,甚至是null
“boolean”如果变量是Boolean型的
“number”如果变量是Number型的
“string”如果变量是String型的
“object”如果变量是一种引用类型或Null类型的,null不占空间,null会返回object其实也是javascript最初实现的一个错误,但从技术上讲,他仍然是原始值

 

7.null和undefined
Undefined类型只有一个值,即undefined。
另一种只有一个值的类型是Null,它只有一个专用值null,即它的字面量。值undefined实际上是从值null派生来的,因此ECMAScript把它们定义为相等的。
alert(null==undefined);//outputs ‘true’
尽管这两个值相等,但它们的含义不同。undefined是声明了变量但未对其初始化时赋予该变量的值,但null则用于表示尚未存在的对象。

 

8.默认的protype属性其实是一个new Object()对象,当然这个属性是可以自己设置的,这个主要是javascript当中的一种继承方式
比如
//定义两个类Man Human
function Man(){
        this.sex="男";
       
}
function Human(){
        this.eat=function (){
                alert("eat something");
         }
}
//一开始Man没有设置其protype属性,注意这个属性要通过类名(函数名)来调用,它会被所有后来实例化的对象,所调用其中的属性及其方法,其实方法也就是动态属性,这个时候protype其实是new Object();的 所以,var man=new Man();如果调用toString()方法,它会先在Man类的对象当中找,如果没找到的,就再找prototype对象,这个时候,它是Object类型的对象,找到了toString()方法,这个时候,就引用调用了Man.prototype.toString();方法,这里你是看不见的,这个相当于一种冒泡方法,从最底层,慢慢往上冒泡,所以直接 调用man.toString();根据以前分析,就能够找到并成功调用了,注意这个时候调用对象
Man.prototype=new Human();设置了这个对象的话,也就和继承差不多,先找man对象中的方法,如果找到了就直接调用,不继续找下去,如果没找到就取找这个对象类型的属性prototype对象,如果在Human对象中还没找到,那么再取找Human.protype,这个时候,Human.protype的对象是一个Object对象,这个时候再在这个对象当中,找到的话就调用,找不到的话就报错,所以这个时候内存中至少有三个对象存在 Human对象, Man对象,Object对象

注意:java当中的子类引用父类的方法的机制,也可以这样来思考。
重载:
其实就是父类里有的方法,子类也给实现了,这样的话,在子类对象当中就找到,这就是javascript当中所谓的“重载”

 

10.关于function“类型”
当你声明一个function aa(){}这样的函数或叫方法的时候,注意function不是javascript当中的类型,但我们可以把他看成是有这么一个类型,那么再以后观察其他代码的时候,就很容易了,相当于声明了一个function类型的对象,注意是小写的f,这个function对象是aa,aa指向代码区当中函数体,也就声明函数的代码,aa是函数名,类型就可以看成是function的。相信我如果你这样来理解,你就会想通很多事情了。其中函数直接量,就更容易理解了,比如说var aa=function(){} 这样的就是函数直接量。函数直接量是一个表达式,它可以定义匿名函数。
aa()叫做方法的调用。
注意 假如你声明了一个函数function aa(){} 当你alert(aa)的时候,谈出的警告框当中显示的function aa(){} 这个其实就是在声明的函数体,调用的时候,aa()加两个括号,就可以找到函数体,然后调用函数体,完成对函数的调用。


11.字符串是放在常量池中的。只要知道这点,我们再来看下面的,理解起来就简单了。注意这点也适合Java,C#,其实就是对基本类型或叫原始类型的封装类了。
当我们在对象环境中使用字符串时,要注意被创建的String对象,只不过是瞬时存在的,它使得我们可以访问属性和方法,此后就没有用了,所以系统将它丢弃的。封装类的目的,将原始类型对象化,可以有方法属性等,来完成对原始对象的结构分析。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值