JavaScript是前端工程师用的不能再熟悉的一种脚本语言,主要是用户创建动态网页、与后端交互等。下面是我学习时整理的JavaScript基础语法
1.js基本常识
js命名规范:
    1.一定要有意义,尽量用英文单词
    2.不要以数字开头,不能使系统的关键字,不能使用运算符
    3.注意大小写
大小写:
    变量名和函数名 第一个单词 小写以后每个单词 首字母大写
    对象 : 每个单词首字母都要大写
分号:
    结构定义语句后不加分号 if for while
    功能执行语句一定要加分号 赋值等
变量:
    变量声明后是浏览器关闭后才释放的,在没关闭之前可以随时使用
数据类型:
    typeof(变量);
1.number (int float double) 注意:计算时还是按整形和浮点型分开使用
2.string (string char)
3.boolean
4.object(object array null) 使用时分别处理
5.undefined 没有声明变量
整数
var a=10;
var a=045;
var a=0Xff;
浮点数不能用等号进行判断
字符串'',""没有区别,所有的转义都可以使用,
2.函数
1.函数的作用 ---决定去不去使用
2.函数的参数 ---决定怎么用
3.返回值     ---决定调用后如何处理
a.函数组成:
1.函数名
2.参数:根据需要使用参数
3.函数体(功能)
4.返回值(可选)
注:函数名不加()时,这个函数名就代表整个函数。函数名可赋值给一个变量,那么这个变量就可以当作这个函数的函数名使用,也可以直接var test=function(){}
b.回调函数(参数中用到了函数):
c.系统函数
系统函数中的global和window对象可以供程序员使用
escape(charstring)//为字符串进行编码.所有空格、标点、重音符号以及其他非ASCII
字符否用%xx编码代替,其中xx等于表示该字符的十六进制数
unescape(charstring) 与其用法一致但是是解码操作
isNaN(data)判断data是否为不是数字类型(NaN)
eval(codestring) 检查并执行代码
d.函数特性
d-1.js中函数外声明的变量即可看成全局变量
默认参数:
d-2.如果形参数大于实参数,那么函数内将把所有形参合成一个数组arguments
3.javascript对象
3.1 基本常识
    a.基于对象的操作方式(面向对象封装、继承、多态)
    b.将相关的操作使用一个对象完成,看作是一个整体
    javascript——–php
     对象————-类
     对象实例 —–对象
    c.对象包括:
字符串对象
数学对象
数组
事件对象
d.对象中存的内容:
   d.1、属性(变量)
   d.2、方法(函数)
都是和这个对象相关的
   e.使用步骤:
     e.1.找到对象
      e.2.实例化对象
      e.3.操作对象
f.实例对象
f.1对象实例:用'.'进行操作
f.2对象实例.属性 (取值,赋值)
f.3对象实例["属性名"]
f.4对象实例.方法();
如Date对象:
3.2自定义对象
a.方法一:
b.方法二:
c.方法三:
  | 
  | 
d.方法四:
  | 
  | 
3.3内置对象
a.Function对象:
b.String对象:
c.快速声明对象:
d.静态对象:不创建对象的情况下直接用对象名访问
e.Math对象:
不要实例化,直接调用
如100以内随机数:
4.数组
数组的声明与应用
a、数组的作用:只要是批量的数据都需要使用数组声明
b、如何声明数组
    4.1.快速声明数组的方法
    var 数组名=[元素1,元素2,元素3,元素4];
    其中的元素可以为另一个数组.
    4.2.使用array对象
  | 
  | 
c、遍历数组
d、数组的处理(内置处理方法)
5.DOM
作用:DOM(Document Object Model)
    1.document 文档  HTML/XML文件 即标记语言
    2.Object对象(HTML元素 转乘的对象(js对象))
    注意:如果使用js操作HTML文档,就需要先将HTML文档中的结构转成js对象
    a.操作属性
    b.操作内容
        5.1.innerText//里面的东西全以文本形式显示  obj.innerText=”brother“,
        该属性火狐浏览器不兼容,可用textContent代替,用法相同
        使用时可自己写一个方法,用document.all判断是否支持所有方法,即自己写个转换
 
5.2.innerHTML//里面的内容以HTML形式显示
        使用时尽量使用innerHTML
    5.3.outerText
    5.4.outerHTML  //3,4都包含自己本身的标签
        表单
            表单元素取值需要用
        var pro="";
    for(pro in a){
        document.write("a."+pro+"="+a["pro"]+"<br>");
    }
可用此方法获取a标签中的所有属性
有了以上三点的操作之前先转成对象
```
    转成对象的两种形式:
    1.标记名(多个)、id(唯一)、name(多个)
    document中的三个方法
    var objs=document.getElementsByTagName(“div”);
    var obj = document.getElementById(“one”);
    var obj = document.getElementsByName(“two”);
    2.通过数组获取
    document.body;
    document.title;
    window.frames;
document.all;//所有的标记
document.embeds;//所有动画
document.scripts;//所有js脚本
document.applets;//所有Java脚本
document.forms;//所有图像
document.images;//所有表单
document.anchors;//所有的锚点
document.styleSheets;//所有的样式
document.links;//所有链接
有7种方式访问(02.html)
其各种操作按照对象操作原则,可以无限制的在js中添加属性
Model:
    一、将文档想成一个倒数,每一个部分(元素、内容、属性、注释)都是一个节点
    二、只要知道一个节点,按关系找到其他节点,
        父节点,                    parentNode
        子节点(第一个,最后一个)  childNode  firstNode  lastNode
        同胞节点 (上一个,下一个) nextSibling previousSibling
    三、找到节点:节点类型nodeType,节点名nodeName,节点值nodeValue
    nodeName属性含有节点的名称
    元素节点的nodeName是标签名称
    属性节点的nodeName是属性名称
    文本节点的nodeName是#text
    文档节点的nodeName永远是#document
注释:nodeName所包含的XML元素的标签名称永远是大写的
    对于文本节点,nodeValue属性包含文本
    对于属性节点,nodeValue属性包含属性值
    nodeValue属性对文档节点和元素节点时不可用的。
    nodeType属性克返回节点的类型
    元素类型                   节点类型
    元素                        1
    属性                        2
    文本                        3
    注释                        8
    文档                        9
    document.close():关闭文档流
    注意:不能用输出的方式在已经结束的文档流中添加数据,此时可以动态创建节点完成操作+
    可以再一个文档流中:
    1.创建节点
        (在文本流中创建用document)document.createElement("");//只有一个文件中只能存在一个的节点不可创建
        appendChild();
        insertBefore();
    2.添加到文档流中
    3.删除节点
    removeChild();
d.事件处理:
    一、事件源:任何一个HTML元素(节点),body,div,button,p,,a,h1…………
    二、事件 :你的操作
鼠标:
    click      单击
    dblclick        双击
    textcontentmenu(在body) 文本菜单
    contextmenu    //右键点击(06.html 2)
    mouseover    放上
    mouseout     离开
    mousedown     按下
    mouseup         抬起
    mousemove      移动
键盘:
    keypress  键盘事件   指数字字母键,其余键无效
    keyup      键盘抬起   
    keydown   按下          此时所有的键都可以取到
文档:
    load     加载   load中的内容在加载时最后执行(06.html 4)
    unload   关闭    关闭或切换页面时触发
    beforeunload    关闭之前
表单:
    focus   获得焦点事件
    blur     失去焦点事件
    submit   提交事件
    change   改变事件
其他事件:
    scroll    滚动事件
    selected  选择事件
三、事件处理程序
    有三种方法添加事件:
        1.格式:<tag on事件="事件处理程序"/>(05.html 1)
        2.
            <script>
                对象.on事件=事件处理程序(05.html 2)
            </script>
        3.<script for="事件源id" event="事件">
                事件处理程序
        </script>
    <body oncontextmenu="return false"></body>//可以屏蔽掉时间(06.html) 且必须用return false.用函数返回值的话要写成return tesat()
事件对象:event window.event
        属性:
            1.srcElement  //代表事件源对象
            2.keyCode          //时间发生时的键盘码  keypress keydown keyup
            3.clientX,clientY 
            4.screenX,screenY
            5.returnValue
            6.cancelBubble
6.浏览器对象
浏览器本身就有一些对象,不用创建即可使用
    window : 当前浏览器窗体的
    属性:
        status
        opener//在子窗体中代表父窗体
        closed
    方法:
        alert()
        confirm()
        setInterval()
        clearInterval();//循环执行
        setTimeout("aaa()",3000)  //只执行一次,在规定时间内执行某一操作
        clearTimeout()
        open();//开启新窗体(11.html)(16)
window子对象:
            document
            frames
            location
            history
            screen 
[window.]成员
document.write();
本身window 
open可以弹出子窗体
frames//多个窗体
跳转位置函数:
    <meta http-equiv="refresh" content="3"><!--3秒钟刷新一次-->
    <meta http-equiv="refresh" content="3;url=http://www.brophp.com"><!--3秒钟加载一次页面-->
    header("Location:login.php");//前面不能有输出
    window.navigate(url)
    location.href=url;
    location.replace('url')
    记得:
        location='url';
        location.reload(true);(14.html)
history
        history.back()
        history.go(-2)(15.html)
screen
        (16.html)
表单对象:
        document.getElementById()
        document.forms.username
        document.frm1.username
        本身表单有的属性都可以作为对象的属性
        action 
        method
        enctype
        title
        方法:
        submit()
        focus()//获取焦点
        事件:
            onfocus();//获取焦点
            onblur();//失去焦点
            onchange();//内容改变事件
            form  上的onsubmit();(17.html)
select标签:
    selectedIndex代表选项框下标
    options[selectedIndex]获取选项
位置:(images/weizhi.png)
    style.top
    style.left
    offsetWidth
    offsetHeight
    offsetTop    //距离外面一层盒子的距离
    offsetLeft
    scrollHeight
    scrollWidth
    scrollTop    //滚动条滚动的高度,一般从0开始计数,计数为+时元素上升,反之下降。
没有滚动条使用js操作是的某一容器内的文本(如div)向上滚动,则需要对该div的上一层非
直接文本容器的scrollTop属性进行改动而不是文本的属性,(22.html)
scrollLeft
//用absolute布局可以是元素脱离文档流,
//用fixed布局可以使页面中某一元素的位置不随滚动条的改变而改变,此时fixed的
布局相对于HTML标签