javascript你真的知道了吗?

下面是我对javascript的一些总结,虽然这些问题很多人都知道,但是还是有很多人并不知道是为什么,例如为什么我们在调用方法的时候有时候加小括号,有时候不加小括号,大多数的人都知道什么时候该加什么时候不该加,但是你真的知道为什么吗?

Javascript是大小写敏感的语言。我的这篇文章大小写很不规范,请大家见谅。

我们都知道javascript是对操作网页的行为,在web开发过程中有着举足轻重的地位,主要是用来做一些网站特效,给用户良好的体验。

其实说到网站特效,开发人员都会做,网上到处都是源代码,要什么特效直接复制改下代码就OK,但是却很少人去了解javascript的内在。

说到javascript不得不说的就是dom,也就是document object model(文档对象模型)。

我们说我们的浏览器只接收三种语言,htmlcssjavascript。当我们在浏览器中输入网址的时候,服务器会将服务端的代码解释成浏览器认识的语言。然后返回给我们的浏览器。

其实在浏览器中是有解析器的,以前的浏览器都是用的同一个解析器,现在ie chrome ff等浏览器都有自己的解析器,浏览器将接受过来的代码和语法解析出来,翻译成文字和图形界面。当我们浏览器解析的时候,遇到图片的时候,浏览器又会再发一个请求,向服务器请求一个图片。所有很多网站都把很多的图片放在一张图片上,这样我们浏览器就只需要向服务器请求一张图片。

其实,浏览器接收到服务器发回的html代码后,进行解析,并生成dom树对象(存在浏览器的缓存里)这个dom对象并不只是包含了html等标签节点,还包含有document,和window,每一个节点都是node的实现对象

dom就是把html的页面模拟成一个对象,就像xmldocument一样,把xml模拟成一个对象,提供了操作各个节点的方法。我们操作网页的元素,就是操作页面的dom

浏览器并不是按照html代码生成图形界面的,而是根据我们解析出来的dom树生成图形界面的

学语言,我们首先学它的数据类型,jsC#一样有值类型也有引用类型。值类型:number/boolean/string/undefined…

       引用类型:我们可以统称为object;所有的引用类型都是object的子集。

先我们看下数组Array是什么东西,一般都说Array是一个以序号为key,以值为value的键值对,也就是json。确实可以这样理解。我们举个例子:

Var arr=new Array();

arr[“a”]=1;

arr[“b”]=2;

for(var k in arr){

alert(k+”----”+arr[key]);

}

我们得到的结果是:a----1b----2

这样似乎验证了我上面说的结论。

但是我们改一行代码,Var arr=new object();我们可以看到同样的效果。

其实数组跟字典根本没关系,在js中的object是一个混合的集合,可以存放任何类型的键值对。我们的Array只是我们object中的一个子集而已。Array就是一个数组,但是js中的数组里面提供push(),pop()等等这些方法,数组就是模拟一个栈。

下面我们说说typeofinstanceof的区别,typeof是获取对象的类型,而instanceof是获取对象的实例。

var s=“张三”;
alert(typeof s);

我们可以看到弹出一个“string”的消息框;

Var s=张三;

alert(s instanceof String);

大家可以试试看会弹出什么结果。

其实结果并不像我们想想的那样弹出一个true而是弹出了false

这样我们就很郁闷了 ,难道s不是string?似乎我们有种被调戏的感觉。

因为String是值类型,我们的 instanceof值能判断引用类型。

我们来验证一下。

Var arr=new array();

Alertarr instanceof Array);这个时候会弹出true

我们再用typeof判断一下Alerttypeof arr)这个时候会返回object

我们总结一下:typeof用于获取对象的类型,,用于判断值类型的对象,如果遇到了引用类型,那么久返回object

Instanceof用于判断对象的实例,只能去判断引用类型,如果遇到值类型的话就返回false

 

我们做网站一般都会建一个外部的js文件,我们来看看外部js文件和内部js的区别。

外部js代码

<head runat="server">

    <title></title>

    <script src="JScript1.js" type="text/javascript"></script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    内容。

    </div>

</form>

</body>

</html>

1.我们会看到当我们弹出对话框的时候,页面上并没有任何内容。

<head runat="server">

    <title></title>

    <script type="text/javascript">

        alert("内部js")

    </script>

 

</head>

<body>

    <form id="form1" runat="server">

    <div>

    内容。

    </div>

    </form>

</body>

</html>

2.我们会看到弹出对话框的时候还是没有显示内容。因为代码是由上而下执行的 。当我们弹出对话框的时候并没有执行到下面的代码。那由此就产生的很多问题,我们要在js代码中操作dom节点,而我们的js代码一般都放在head标签中,那当我们执行js代码的时候都下面的html代码都还没加载。这就出来了一个onload事件,这个事件就是当我们的html代码加载完毕的时候执行的。

看下面的代码

 

<head runat="server">

    <title></title>

    <script type="text/javascript">

        Function load()

{

         alert("内部js");

}

    </script>

 

</head>

<body onload=” load()>

    <form id="form1" runat="server">

    <div>

    内容。

    </div>

    </form>

</body>

</html>

3.这个时候我们会看到我们的页面是先显示内容然后再弹出消息框的

 

我们再来看下这段代码

<head runat="server">

    <title></title>

    <script src="JScript1.js" type="text/javascript"></script>

    <script type="text/javascript">

        function load() {

            alert("内部js")

        }

    </script>

 

</head>

<body onload="load();">

    <form id="form1" runat="server">

    <div>

    内容。

    </div>

    </form>

</body>

当弹出“外部js”的时候,我们的页面并没有显示内容,这似乎让我们想到了什么

当我们的外部js文件执行的时候会中断当前浏览器的运行。

那如果我们的外部js需要对dom树进行操作,那就无法完成。

所以一般情况下我们会把js文件放在页面的下面。这样就没问题了。

 

下面说说一个最容易晕而我们都知道该怎么用的问题,那就是我们调用一个方法什么时候该加小括号,什么时候不该加小括号。

我们定义这么一个方法

Function show()

{

   Alert(“我真帅”);

}

下面的html中我们家一个input标签。

<input type=”button” id=”btnLogin” onclick=”show();” />

这个时候加括号代表的是我们调用上面的show方法。

这个都没什么好说的

我们去掉onclick事件的代码,

我们在js代码中动态的去操作执行。

Document.getelementbyid(“btnLogin”).onclick=show()

首先第一点,这里有等号,也就是说等号右边的先执行,

我们知道,当我们的方法加上小括号的时候就是执行方法 ,这里我们看下

我们相当于把show方法执行后的结果赋值给onclick这个事件,而我们的show方法并没有指定返回值,所有执行后返回的是undefined,就相当于我们把undefined赋值给了onclick这个事件,而我们onclick这个事件是需要去执行一个方法的,我们的方法能去执行undefined吗??

Document.getelementbyid(“btnLogin”).onclick=show;

这样才是正确的,把上面的理解了,对于这个就很好理解了 ,我们没有加小括号,就是说我们将这个方法对象赋给onclick这个事件,再说的悬乎一点,就是将这个方法的指针赋给onclick,当onclick触发的时候就通过方法指针来调用方法里面的内容。

posted @ 2011-08-06 00:36  农村山沟沟出来的大学生  阅读(476)  评论(1)    收藏  举报