码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript基础

时间:2016-06-22 23:24:40      阅读:391      评论:0      收藏:0      [点我收藏+]

标签:

简介:javascript是一种面向对象的由浏览器解释执行的弱类型客户端脚本语言(因为是弱类型的解释语言所以JS是灵活的,效率也不太高的)。

组成成分:

     浏览器对象模型(BOM):  JS与浏览器进行交互的方法和接口

     ECMAScript:  描述了该语言的语法和基本对象,javascript的国际规范

     文档对象模型(DOM):  html文档的结点模型,提供了一个javascript操作html的接口

能做什么:

     1.  操作Html,动态的更改html的内容,使html不单单是文档,可以实现更好的交互。

     2.  与服务器通信,一般指通过ajax与服务器通信。

     3.  储存数据,浏览器端的数据储存,一种前沿技术。

基础知识:  

     javascript中的数据类型:  基本数据类型:string,number,boolean——(String,Number,Boolean是前面三种的包装对象,提供了可供操作的属性和方法)     

                    特殊类型:undefined,null

                    引用类型:Object,Function,Data,Array,RegExp, ...

     javascript变量(variable):  存放信息的工具,组织的信息通过算法 实现各种功能,javascript中可以存放值,对象,函数等。 

             全局变量:  在函数外使用var关键字定义,

                    而没有用var关键字,使用直接赋值方式声明的是全局变量,定义后直接加到window对象中,在代码全局可以访问。

             局部变量:  在函数内部使用var关键字定义的函数。只能在这个函数这一个封闭的空间内使用。

             js作用域特点:  内层函数可以访问外层函数全部变量。

      数组:  数组就是列表,当你深入研究它时,你会看到它的复杂性(相比于其他的强类型语言js数组没有相同类型集合的规定,所以数组里可以放其他不同的基本数据类型,或者数组来构造二维数组等——《Jvavscrpit应用开发实践指南》。

其他方面:

    操作文档对象模型DOM:

        文档对象模型(DOM):  给我们提供了一个接口可以让js选择操作的对象,去修改删除HTML文档。

          在 HTML DOM (文档对象模型)中,每个部分都是节点:

        • 文档本身是文档节点
        • 所有 HTML 元素是元素节点(element)
        • 所有 HTML 属性是属性节点(attribute)
        • HTML 元素内的文本是文本节点(text)
        • 注释是注释节点

        

                      技术分享

                       模型中具有明显的父(parent)子(chile)和兄弟(sibling)结构

           DOM Document(文档节点):  每个载入浏览器的 HTML 文档都会成为 Document 对象,使我们可以从脚本中对 HTML 页面中的所有元素进行访问是, window.document为对 Document 对象的只读引用。

        DOM Element(属性节点):  元素结点都有一个 style 属性,用于控制元素结点的显示样式,与 CSS 里面的各属性有一一对应的关系,style 属性是一个对象,所以修改他的属性可以这样——Node.styel.display="none"。

        DOM Event(触发事件):  Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。事件通常与函数结合使用,函数不会在事件发生前被执行!

         操作文档对象模型首先要学会定位元素节点,这样我们才可以操作结点的属性和内容。

                   技术分享    技术分享

         定位元素结点:  1.根据id定位document.getElementById(),得到一个元素节点;

                  2.根据标签名定位document.getEmentsByTagName(),得到一个元素结点数组

                  3.根据属性名定位document.getEmentsByClassName(),得到一个元素结点数组

                  4.根据css定位document.querySelector()返回第一个匹配的元素document.querySelectorAll()得到一个元素结点数组(浏览器的支持度较低)

         处理属性结点:  1.getAttribute();得到元素节点后通过getAttribute方法得到结点的属性

                  2.setAttribute();设置元素结点的属性

                  3.removeAttribute();移除元素结点的属性

                  4.hasAttribute();判断属性是否存在

                  对应的jquery中的方法attr()、prop(),removerattr().。addClass(),removeClass(),hasClass(),taggleClass();

         遍历DOM:   在遍历DOM中我们可以感觉到DOM的树状结构。当然更多的好处不用仅通过上面的方法定位结点,更可以通过遍历得到元素结点。

                   1.parentNode()得到元素节点的父节点—>节点的上下级关系

                   2.previousSibling()与nextSibling()左边的结点,右边的结点—>兄弟节点的平级关系

                   3.firstChile()与lastChild()首尾两个子节点

         DOM中添加和移除结点:体现了javascript动态语言的特点

                   1.createElement()新建元素节点

                   2.createTextNode()新建文本节点

                   3.appendChild()元素节点中加入上面方法新建的结点

                   4.removeChild()删除定位到元素节点

         下面是我学习javascript是学长给我的遮盖层代码,体现了javascript的添加节点,也感谢一下带了我一年的学长。

            技术分享

         虽然javascript使用简单但是并不代表可以随意用JS,“相比于css的渲染速度js是非常的慢的,所以在渐近增强模型中写好js的关键在于知道怎么绕过js代码,直接用css完成需求”——《javascript应用开发实践指南》

     javascript函数(function):  函数是用来封装代码,我们可以反复的调用它,增强了代码的可维护性。

         匿名函数:  通过名字我们就可以看出这是没有名字的函数(分割作用域),于是他就没有被调用的功能而是立即执行,所以他的运行效率很高。黑体字是它的两个特点。

            既然是立即运行为什么要使用它?我们知道函数可以分割作用域,所以在主函数使用匿名函数可以把变量保存在函数这个作用域里,保持了全局环境的干净,当然这只是作用域的一方面,匿名函数的立即执行还有很多作用。

            匿名函数的格式:    

            技术分享

            下面的代码牵扯到一点作用域链和匿名函数的知识,我js第一阶段的时候经常出现这问题,拉出来警戒一下自己。

            首先分析一下错误的写法:在逻辑上是给数组中的每个对象添加监听,但是当对象的点击事件触发时,js会在onMyload这个函数域里找i这个变量i=arr.length(),所以只能访问最后一个对象,

            正确的写法:我们看到for循环里有一个匿名函数,传的参数是数组下标,当点击事件触发时,arg参数=i,因为i被匿名函数调用,变量一直在内存中,所以这是访问的下标是准确的值。

            技术分享

         回调函数:  一个函数调用另一个函数,后者就是回调函数。回调函数将函数功能分层,体现了函数执行的先后。Ajax处理服务器的通信时,回调函数是很重要的一个功能。

         作用域:  编程语言中的重要性质,旨在缩短代码中变量和函数发生重复的几率。javascript中主要是通过function函数分割作用域,只有函数作用域没有if-for-while等的块作用域。

     函数的代码结构(书写函数的组织形式不同):  

         普通函数:

             技术分享                     

         变量形式出现的函数:

              技术分享

              可以看出这是把一个匿名函数赋值给一个js变量,调用时read(形参);

              这种与普通函数在功能上没有什么不同,只是在运行时变量形式出现的函数没有声明的提升(函数会被会被提升至函数所处上下文的顶部,C语言中表示先声明后引用),原因—匿名函数没有名字无法提升。

            

         方法形式出现的函数:(同样是函数的组织形式的一部分)

             对象字面量的定义方式

               技术分享

              对象工厂+原型方式   

              技术分享

面向对象的开发模式:

         对象:   一种数据储存方式。在数据变得更加复杂、更难管理,且联系性很强的时候,一般用对象储存。

              虽然对象是一种灵活的数据储存方式,但是对于js这种弱类型语言而言比较简单的程序大多采用事件驱动模型比较,在大型项目中才使用面向对象模型。

              JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...

              对象是属性和方法的集合,在js中难道上面的基本数据类型string,number,boolean也是对象吗?

              技术分享

              我们可以在浏览器上看str变量的__proto__,发现它是指向String类型的原型prototype,也就是str是通过var str=new String的方式声明的,所以javascript中最基本的数据类型也是对象;

              1、方法与函数:方法是对象里面的函数,函数是算法的封装。

              2、闭包:使用函数将数据和函数封装,在不暴露变量和方法的时候,创建一套在整个作用链中公用的API。闭包——变量的作用域,可以延伸至闭包的函数内部,访问函数内的数据。

                     上面说到面向对象模型的开发模式中多用到javascript对象使用面向对象通过属性和方法的形式组织对象,以对象的形式组织程序,使代码具有良好的结构,易于维护组织。

              官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

              闭包的用处:1、读取函数内部的变量。2、这些变量始终保存在内存中——(过多的使用闭包太耗内存)

              技术分享

                    

事件驱动的开发模式

      事件处理模型:  

              事件处理器:   1.获取DOM结点  2.添加事件处理函数  3.执行用于处理该事件的特定函数

              技术分享

              获取到节点,绑定事件(总是以On开始,onsubmit、onfoucs、onblur、onmouseover、onclick等),执行匿名函数里的函数

              事件监听器:  1.获取DOM结点  2.要绑定的事件类型  3.监听器的函数  4.是否启用捕获模式(事件传播,true时向上传播事件)

              技术分享

通过Ajax与服务器通信:

      Ajax:在不刷新整个页面的情况下重新加载其中的部分HTML文档。

       服务器通信:Ajax的核心内容,目标是客户端向服务器发送信息,并接受后者的回传,以求在此过程中创建出更好的用户体验。

        XMLHttpRequest 对象用于在后台与服务器交换数据。

        基础应用:

            1.创建XMLHttpRequest对象

            2.向服务器发送数据

            3.接受服务器返回的数据

       由于只是刚开始学PHP这里也说不详细,等我对它有比较深入的理解了再写,这里只是体现javascript通过Ajax与服务器通信这一功能,以后会补上或者单独出一个博客,感觉安全问题比较重要。

      技术分享

      setRequestHeader(header,value):  向请求添加 HTTP 头。

       open(method,url,async):  规定请求的类型、URL 以及是否异步处理请求。

       send():  将请求发送到服务器。 

       onreadystatechange():  服务器返回数据后执行的函数。

        readyState

        • 0: 请求未初始化
        • 1: 服务器连接已建立
        • 2: 请求已接收
        • 3: 请求处理中
        • 4: 请求已完成,且响应已就绪

        status:    

          200: "OK"

          404: 未找到页面    

感悟:JS我开始大约学习了12天,之后就是一直在用,也在学习。开始学习时遇到了很多困难,但是收获也是挺多的,比如如何怎么更快的学习一个语言,语言的重点,接触了弱类型语言,等,接下来打算看《jquery权威指南》然后看《jquery内核详解与实践》。

Javascript基础

标签:

原文地址:http://www.cnblogs.com/yweihum/p/5573533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!