• JS基础(一)


    1、JS脚本放置位置

    页面内的JS脚本中,各种公共函数和变量应放在head标签之间,而将页面加载期间执行的代码、dom对象初始化以及与dom相关的全局引用赋值操作放在body标签之间,如果没有特殊要求,不妨放在body标签之前。

    2、js命名规范和代码注释

    JS区分大小写,包括数字、字母、下划线(_)、美元符($),小写字符命名变量,保留字可根据系统默认大小写来输入;类和构造函数使用大写首字符

    单行注释,//注释内容;多行注释,/*注释内容*/

    3、变量作用域

    函数外var全局变量,函数内var局部变量;不适用var声明的都是局部变量

    4、with语句(一般不建议使用)

    <script type="text/javascript" language="javascript">
    with(document.getElementById("box").style){
    	    borderColor="red"; 
    	    borderWidth="1px";
    	    borderStyle="solid";
    	    width="400px";
    	    height="200px";
    }
    </script>
    

    5、数据类型和转化

    • 基本数据类型:数值(都是浮点型)、字符串、布尔型
    • 引用数据类型:对象、数组、函数
    • 特殊类型:Null类型只有一个值:null;未定义的值:undefined
    • 数值+“”=字符;布尔+“”=字符;
    • 字符*1=数值;布尔*1=数值;parseInt/parseFloat(字符)=数值;
    • !!数值=布尔;!!字符=布尔;

    6、函数定义

    • 使用function语句声明:命名函数,function f() { };匿名函数,var f=function() { }
    • 使用Function对象构造:var say = function(name, say){document.write('<h1>' + name + ' : ' + say + '</h1>'); }

    7、函数分类(函数可作参数、表达式、返回值)

    • 闭包函数:函数里面包含另一个函数
    • 高阶函数:函数作为参数
    • 函数柯里化:函数作为返回值

    8、对象和数组

    • 对象是无序的、已经命名的数据集合,var point={z:{a:1,b:2};x:2.3,y:-1.2}; var i=point["z"]["a"];var j=point.z.b;
    • 数组是有序的数据集合,与对象可相互转化,但是数组拥有大量方法,适合完成一些复杂的运算,var a=new Array(1,2,3,"4","5");var a=[1,2,3,"4","5"];

    9、数组常用方法

    length(属性)

    var a = [1, 2, 3, 4, 5];
    a.length = 4;
    document.write(a);

    push/pop

    var a = []; //定义一个空数组
    a.push(1,2,3); //得到数组a[1,2,3]
    a.push(4,5); //得到数组a[1,2,3,4,5]
    a.pop();//得到数组a[1,2,3,4]

    unshift/shift

    var a = []; //定义一个空数组
    a.unshift(1,2,3); //得到数组a[1,2,3]
    a.unshift(4,5); //得到数组a[4,5,1,2,3]
    a.shift(); //得到数组a[5,1,2,3]

    splice

    var a = [1,2,3,4,5,6];
    var b = a.splice(2,2);
    document.write(a + "<br />");//输出[1,2,5,6]
    document.write(b);//输出[3,4]

     splice

    var a = [1,2,3,4,5,6];
    var b = a.splice(2,2,7,8,9);
    document.write(a + "<br />");//输出[1,2,7,8,9,5,6]
    document.write(b);//输出[3,4]

    join

    var a = [1,2,3,4,5];a = a.join("-");document.write("a类型 = " + typeof(a)+"<br />");//a类型=string

    document.write("a的值 = " + a);//a的值=1-2-3-4-5

    split

     var a = [1,2,3,4,5];a = a.join("-");var s = a.split("-");document.write("s类型 = " + typeof(s)+"<br />");//a类型=object

    document.write("s的值 = " + s);//a的值=1,2,3,4,5

    reverse  var a = [1,2,3,4,5];var a = a.reverse();document.write(a);//输出[5,4,3,2,1]
    sort

    var a = [3,2,5,1,4];
    var f = function(x,y){
    return y-x;
    };
    var b = a.sort(f);
    document.write(b);//输出[5,4,3,2,1]

    concat  var a = [1,2,3,4,5];var b = a.concat([4,5],[1,[2,3]]);document.write(b);//输出[1,2,3,4,5,4,5,1,2,3]
    slice  var a = [1,2,3,4,5,6,7,8,9];var b = a.slice(2,5);document.write(b);//输出[3,4,5]

    10、检测数据类型

     值(value) typeof value(表达式返回值)  value.constructor(构造函数的属性值) 
     var value=1  "number" Number 
     var value="a" string  String 
    var value="true"   boolean Boolean 
    var value={}  "object"  Object 
    var value=new Object()  "object"  Object 
    var value=[]   "object"  Array 
    var value=new Array()  "object"  Array 
    var value=function(){}   "function" Function 
    function className(){}   "object" className 
    function typeOf(o){
        var _toString = Object.prototype.toString; 	
        // 获取对象的toString()方法引用
        // 列举基本数据类型和内置对象类型,可以进一步补充该数组的检测数据类型范围
        var _type ={
            "undefined" : "undefined",
            "number" : "number",
            "boolean" : "boolean",
            "string" : "string",
            "[object Function]" : "function",
            "[object RegExp]" : "regexp",
            "[object Array]" : "array",
            "[object Date]" : "date",
            "[object Error]" : "error"
        }
        return _type[typeof o] || _type[_toString.call(o)] || (o ? "object" : "null"); 
    }
    
    var a = Math.abs;
    alert(typeOf(a));	//"function"
    

    11、数值计算与类型转换(当对象与数值进行加号运算时,则会尝试将对象转化为数值,然后参与求和运算。如果转换不成功,则执行字符串连接操作)

    值(value) 字符串操作环境 数字运算环境 逻辑运算环境 对象运算环境
    undefined "undefined" NaN false Error
    null "null" 0 false Error
    非空字符串 不转换 字符串对应的数字值或NaN true String
    空字符串 不转换 0 false String
    0 "0" 不转换 false Number
    NaN "NaN" 不转换 false Number
    Infinity "Infinity" 不转换 true Number
    Number.POSITION_INFINITY "infinity" 不转换 true Number
    Number.NEGATIVE_INFINITY "infinity" 不转换 true Number
    Number.MAX_VALUE "1.7976931348623157e+308" 不转换 true  Number
    Number.MIN_VALUE "5e-324" 不转换 true Number
    其它所有数字 "数字的字符串" 不转换 true Number
    true "true" 1 不转换 Boolean
    false "false" 0 不转换 Boolean
    对象 toString() valueOf()或toString()或NaN true 不转换

    12、字符串替换(正则表达式)

    <script>
    var s="javascript";
    var b=s.replace(/(java)(script)/,"$2-$1")//输出script-java
    alert(b);
    
    var b=s.replace(/java/,"$&");//输出javascript
    alert(b);
    
    var b=s.replace(/java/,"$`");//左侧文本 输出script
    alert(b);
    var b=s.replace(/script/,"$`");//输出javajava
    alert(b);
    
    var b=s.replace(/java/,"$'");//右侧文本 输出scriptsctipt
    alert(b);
    
    var b=s.replace(/java/,"$$");//输出$script
    alert(b);
    </script>
    

    13、增强数组排序

    <script>
    /*function f(a,b){
    	var a=a%2;
    	var b=b%2;
    	if(a==0) return 1;
    	if(b==0) return -1;
    }
    var a=[3,1,2,4,5,7,6,8,0,9];
    a.sort(f);
    alert(a);
    
    function f(a,b){
    	var a=a%2;
    	var b=b%2;
    	if(a==0) return -1;
    	if(b==0) return 1;
    }
    var a=[3,1,2,4,5,,7,6,8,0,9];
    a.sort(f);
    alert(a);
    
    var a=['aB','Ab','Ba','bA'];
    a.sort();
    alert(a);*/
    function f(a,b){
       var a=a.toLowerCase;
       var b=b.toLowerCase;
       if(a>b) return 1;
       else
        return -1;
    }
    var a=['aB','Ab','Ba','bA'];
    a.sort(f);
    alert(a);
    
    function f(a,b){
    	if(a>Math.floor(a)) return 1;
    	if(b>Math.floor(b)) return -1;
    }
    var a=[3.555,1.234,3,2.111,5,7,3]
    a.sort(f);
    alert(a);
    </script>
    

    14、浏览器对象模型(BOM)

    包含对象:

    • 用户对象:在JS脚本中定义的对象
    • 内置对象:由系统预定义并内置到JS内的对象,如Object、Array、Function、Date、Math、String、Number、RegExp等
    • 宿主对象:捆绑到浏览器内的API组件定义的对象。这些对象与JS语言本身没有任何直接关系,但在JS脚本中可以访问和操作它们,如Window、Document、Navigator、Screen、Location、History、Form等

    BOM作用:

    • 弹出新的浏览器窗口,移动、关闭浏览器窗口以及调整窗口大小(窗口对象)
    • 提供浏览器详细信息(导航对象)
    • 提供装载到浏览器中页面的详细信息(定位对象)
    • 提供用户屏幕分辨率详细信息(屏幕对象)
    • 对Cookie的支持

    15、BOM操作浏览器常用方法

    打开窗口:window.open(url,name,features,replace)

    var url="http://www.baidu.com/";
    var features="height=400,width=800,top=10,left=10,toolbar=no,menubar=no,scrollbar=no,resizable=no,location=no,status=no";
    document.write('<a href="http://www.sina.com.cn/ target="newW">切换到新浪</a>');
    var me=window.open(url,'newW',features);
    setTimeout(function(){me.close();},60000);

     三种人机交互窗口:alert()、confirm()、prompt()

    var user=prompt("请输入你的用户名:");
    if(!!user){
        var ok=confirm("你输入的用户名为:
    "+user+"
    请确认。");
        if(ok){
            alert("欢迎你:
    "+user);
        }
        else{
            user=prompt("请重新输入你的用户名:");
            alert("欢饮你:
    "+user);
        }
    }
    else{
        user=prompt("请输入你的用户名:");
    }

     获取URL查询字符串信息

     1 var queryString=function(){
     2     var q=location.search.substring(1);
     3     var a=q.split('&');
     4     var o={};
     5     for(var i=0;i<a.length;i++){
     6         var n=a[i].indexOf('=');
     7         if(n==-1) continue;
     8         var v1=a[i].substring(0,n);
     9         var v2=a[i].substring(n+1);
    10         o[v1]=unescape(v2);
    11     }
    12     return o;
    13 }
    14 var f1=queryString();
    15 for(var i in f1){
    16     document.write(i+"="+f1[i]+'<br/>');
    17 }
    18 </script>
    19 </head>
    20 <body>
    21 <a href="?id=123&name=location">获取查询字符串</a>

     设计窗口居中和弹跳窗口

    • availHeight和availWidth显示web浏览器屏幕可用高度和宽度
    • availLeft和availTop屏幕最左侧x坐标和y坐标
    • moveTo()、moveBy()、resizeTo()、resizeBy(),by相对,移动指定个长度单位;to绝对,移动到指定坐标
     1 <script>
     2 function openW(url){
     3     var w=screen.availWidth/2;
     4     var h=screen.availHeight/2;
     5     var t=(screen.availHeight-h)/2;
     6     var l=(screen.availWidth-w)/2;
     7     var p="top="+t+",left="+l+",width="+w+",height="+h; 
     8     var win=window.open(url,"url",p);
     9     win.focus();
    10 }
    11 openW("http://www.baidu.com/");
    12 </script>
    13 
    14 <script type="text/javascript" language="javascript">
    15 window.onload=function(){
    16     timer=window.setInterval("jump()",1000);
    17 }
    18 function jump(){
    19     window.resizeTo(200,200);
    20     x=Math.ceil(Math.random()*1024);
    21     y=Math.ceil(Math.random()*760);
    22     window.moveTo(x,y);
    23 }
    24 </script>

     16、DOM是Document Object Modal(文档对象模型)的简写,它表示访问和操作文档(如HTML、XML文档)的API(应用程序接口)

    遍历文档

    <script type="text/javascript" language="javascript">
    function count(n){
        var num=0;
        if(n.nodeType==1) num++;
        var son=n.childNodes;
        for(var i=0;i<son.length;i++) num+=count(son[i]);
        return num;
    }
    window.onload=function(){
        alert("当前文档包含"+count(document)+"个元素");
    }
    </script>

    动态增加文档内容

    window.onload=function(){
          var ul=document.getElementsByTagName("ul")[0];
          var lis=ul.getElementsByTagName("li");
          lis[0].onclick=function(){
              this.innerText="谢谢";
          }
          lis[1].onclick=function(){
              this.innerHTML="<h2>我是一名初学者</h2>";
          }
          lis[2].onclick=function(){
              this.outerText="我是学生";
          }
          lis[3].onclick=function(){
              this.outerHTML="<h2>当然喜欢</h2>";
          }
    }

     17、操作节点和属性

    <script>
    //获取节点
    var p=document.getElementsByTagName("p")[0];
    alert(p.innerHTML);
    p.innerText=p.innerText;
    //获取节点属性
    var box=document.getElementById("box");var info="nodeName:"+box.nodeName;
    info+="<br>nodeType:"+box.nodeType;
    info+="<br>parentNode:"+box.parentNode.nodeName;
    info+="<br>childNodes:"+box.childNodes[0].nodeName;
    document.write(info);
    //设置节点属性
    var p=document.getElementsByTagName("p");
    alert(p[4].innerHTML);
    for(var i=0;i<p.length;i++){
        p[i].setAttribute("class","blue");
    }
    //克隆节点、true为复制节点包含所有内容
    window.onload=function(){
        var p=document.createElement("p");
        var h1=document.createElement("h1");
        var txt=document.createTextNode("hello world");
        p.appendChild(txt);
        h1.appendChild(p);
        document.body.appendChild(h1);
        var new_h1=h1.cloneNode(true);
        document.body.appendChild(new_h1);
    }
    //insertbefore 把节点放到父节点指定子节点前面
    window.onload=function(){
       var ok=document.getElementById("ok");
       ok.onclick=function(){
           var red=document.getElementById("red");
           var blue=document.getElementById("blue");
           var h1=document.getElementsByTagName("h1")[0];
           red.insertbefore(blue,h1);
       }
    }
    //删除子节点
    window.onload=function(){
       var ok=document.getElementById("delete");
       ok.onclick=function(){
          var blue=document.getElementById("blue");
          (blue.parentNode).removeChild(blue);
       }   
    }
    //替换节点 用h2替换h1
    window.onload=function(){
       var ok=document.getElementById("ok");
       ok.onclick=function(){
          var red=document.getElementById("red");
          var h1=document.getElementsByTagName("h1")[0];
          var blue=document.getElementById("blue");
          var h2=document.createElement("h2")
          red.replaceChild(h2,h1);
       }   
    }
    window.onload=function(){
       var ok=document.getElementById("ok");
       ok.onclick=function(){
          var red=document.getElementById("red");
          var blue=document.getElementById("blue");
          var h1=document.getElementsByTagName("h1")[0];
          var del_h1=red.replaceChild(blue,h1);  
          red.parentNode.insertBefore(del_h1,red);   
       }
    }
    //获取和设置属性、属性值
    /*window.onload=function(){
        var red=document.getElementById("red");
        alert(red.getAttribute("id"));
        var blue=document.getElementById("blue");
        alert(blue.id);
    }
    window.onload=function(){
        var red=document.getElementById("red");
        var blue=document.getElementById("blue");
        red.setAttribute("title","这是红色盒子");
        blue.setAttribute("title","这是蓝色盒子");
    }*/
    window.onload=function(){
        var hello=document.createTextNode("Hello World!");
        var h1=document.createElement("h1");
        //var h2=document.createElement("h2");
        h1.setAttribute("title","您好!欢饮光临!");
        //h2.title="这是h2的title";
        h1.appendChild(hello);
        //h2.appendChild(hello);
        document.body.appendChild(h1);
    }
    //增加和删除属性值
    window.onload=function(){
    var table=document.getElementsByTagName("table")[0];
    var del=document.getElementById("del");
    var reset=document.getElementById("reset");
    del.onclick=function(){
        table.removeAttribute("border");
    }
    reset.onclick=function(){
        table.setAttribute("border","2");
    }
    }
    </script>

     18、JS事件模型和事件流

    • 基本事件模型:通过简单的事件属性为指定标签绑定事件处理函数,属性较弱,一般不建议使用
    • 标准事件模型:W3C制定
    • IE事件模型

    多个对象同时相应一个事件的时候,哪个对象优先相应,哪个对象后续响应?决定这种响应顺序的机制称为事件流

    • 冒泡型事件流(IE支持:div->body->document):由特殊到一般,从下往上。
    • 捕获型事件流:(document->body->div)从一般到特殊,从上往下。
    • 标准事件流:W3C定义的标准事件流同时支持以上两种事件流,但是捕获型事件流先发生,即从document开始再返回document结束。

    19、基本事件模型的两种绑定方式

    //静态绑定
    <button id="btn" onclick="alert('你单击的一次!');">按钮</button><!--单引号里只能双引号 双引号里只能单引号-->
    //动态绑定 <script> var button=document.getElementById("btn"); btn.onclick=function(){ alert("你单击的一次!") } </script>

     20、标准事件模型和IE事件模型的注册、注销

    //标砖事件模型
    <body> <h2>标准事件模型的注册和注销</h2> <input id="a" type="button" value="点我"/> <input id="b" type="button" value="删除事件"/> <script> var a=document.getElementById("a"); var b=document.getElementById("b"); function ok(){ alert("您好!欢饮光临!"); } function delete_event(){ a.removeEventListener("click",ok,false); } a.addEventListener("click",ok,false); b.addEventListener("click",delete_event,false); </script> </body> //IE事件模型 <body> <p id="p1">IE事件模型的注册和注销</p> <script> /*var p1=document.getElementById("p1"); p1.attachEvent("onmouseover",function(){ p1.style.background='blue'; }) p1.attachEvent("onmouseout",function(){ p1.style.background='red'; })*/ var p1=document.getElementById("p1"); var f1=function(){ p1.style.background='blue'; }; var f2=function(){ p1.style.background='red'; p1.detachEvent("onmouseover",f1); p1.detachEvent("onmouseout",f2); }; p1.attachEvent("onmouseover",f1); p1.attachEvent("onmouseout",f2); </script> </body> //兼容IE和标准 <body> <p id="p1">IE和标准事件模型都兼容</p> <script> var p1=document.getElementById("p1"); var f1=function(){ p1.style.background='blue'; }; var f2=function(){ p1.style.background='red'; if(p1.detachEvent){ p1.detachEvent("onmouseover",f1); p1.detachEvent("onmouseout",f2); } else{ p1.removeEventListener("mouseover",f1); p1.removeEventListener("mouseover",f2); } }; if(p1.attachEvent){ p1.attachEvent("onmouseover",f1); p1.attachEvent("onmouseout",f2); } else{ p1.addEventListener("mouseover",f1); p1.addEventListener("mouseout",f2); } </script> </body>

     

  • 相关阅读:
    Android之startActivity、startActivityForResult和setResult详解
    Android之Activity的标准写法参考
    Android之Handler用法总结[一]
    UHF天线知识汇编
    数字图像处理【一】基础理论
    S2SH之简易的Web Service实现
    Java Web开发环境搭建基础[Windows篇]
    Hadoop的安装(Ubuntu 12.10为例)
    【NOIP2016普及组复赛】魔法阵
    【NOIP2016提高A组集训第13场11.11】最大匹配
  • 原文地址:https://www.cnblogs.com/agasha/p/9991975.html
Copyright © 2020-2023  润新知