zoukankan      html  css  js  c++  java
  • Javascript系列:总体理解

    js是一个脚本客户端(浏览器)语言。和sql html类似。多练习。

    没有排错的经验,弱类型语言,浏览器解释执行,出错也不会报错

    预备

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head>
     5     <title></title>
     6     <script src="JScript.js" type="text/javascript"></script>
     7     <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
     8 </head>
     9     <body>
    10          <script type="text/javascript">
    11              alert(new Date().toLocaleDateString());
    12     </script>
    13     </body>
    14 </html>
    添加一个js和css文件,各自的标签script和link有着同样属性type=“text/js” “text/css”
    <script>   
            </script>
            <a href="javascript:alert('a标签的js事件')">事件</a>
            <input type="button"value="事件" onclick="alert('标签属性名(事件名)')"/>
    事件 超链接 javascript类似http:ftp:thunder:ed2k协议的超链接 html标签属性事件名。在前面的html总结中有mailto:
     1 变量 给变量赋值 循环 打印
     2 
     3 监听动作
     4 
     5 在head中,也可以在body中。都需要<script>标签内
     6 
     7 alert("");
     8 
     9 html从上到下依次执行,如果js放中间,会先中间执行。
    10 
    11 比如:给一个控件注册事件,无法执行,可能就应为body还没执行完
    12 
    13  
    14 
    15 大小写敏感,弱类型。 var  可能是数组 对象 没有var 的变量是全局变量,任何地方都能用。
    16 
    17 注释:// /**/和c#一样  <!-- -->没用和html,习惯用这个标明 这是一些js代码
    18 
    19 多个script标签,就像是一个script标签。在一个script标签定义的变量,在另个script标签页能用。 
    20 
    21 字符串使用单引号 双引号都一样    
    22 
    23 嵌入到html的js字符串用单引号,为了防止和属性冲突。
    24 
    25 单独的字符串都可以
    26 
    27 new Date().toLocaleDateString()
    基础理论

    msdn查看js用法百度msdn library

    类型 字符串String、数字Number、布尔Boolen、数组Array、对象、Null、Undefined

    用户输入 确认 警告窗口

    <script type="text/javascript">
            var msg = prompt('你爱我不?', '爱or不爱?');//问,答  返回答
            if (confirm('你确定' + msg + "?")) {
                alert("我也" + msg + "你");
            } else {
                alert("不理你!");
            }
        </script>
    
    用户输入 确认 警告窗口
    用户输入弹窗 确认框 警告

    刷新确定重新加载?,×号确定离开本页面?

     <script type="text/javascript">
            //                window.onunload = function () { alert("卸了"); };
            window.onbeforeunload = function () {
                var msg = "确认离开当前页面吗?离开将会丢失";
                return msg;
            };
            //        if (confirm('ok????')) {
            //            alert(123);
            //        }
        </script>
    刷新×号统一代码

    变量流程控制 遍历循环 typeof()方法

    1   <script type="text/javascript">
    2              //var num = 1 + 2 + "3";  33
    3              //var num = 1 + 2 + '3';  33
    4              var num =' 1' + 2 + '3';123
    5              alert(num);
    6     </script>
    js从左到右执行变量类型,单双引号使用一样
       <script type="text/javascript">
            function fun(argu) {
                   return (argu * 2);
            }
            alert(fun('a'));
        </script>//NaN是Number类型的“值”!!!
    NaN:非数字的意思。比如一个数除以0
    <script type="text/javascript">
                 var num = 65;
                 if (num%2==0) {
                     alert('num是偶数');
                 } else {
                     alert('num是奇数');
                 }
                 switch (num/10) {
                 case 10:
                     alert('优秀');
                     break;
                 case 9:
                     alert('良好'); 
                     break;
                 case 8:
                      alert('一般');
                      break;
                 default:
                      alert('');
                      break;
                 }
        </script>
    if else switch.. case..:..;break流程控制
             <script type="text/javascript">
    //             var sum = 0;
    //             var index = 0;//0 1无所谓
    //             while (index<=100) {
    //                 sum += index;
    //                 index++;
    //             }
    //             alert(sum);
                 var sum = 0;
                 for (var i = 0; i < 101; i++) {   //101非100
                     sum += i;
                 }
                 alert(sum);
        </script>
    循环 while for 增量 总和
     1 <script type="text/javascript">
     2         function fun(argu) {
     3         //此处typeof返回的类型的“值”,此处的Numeber类型的值为number注意。
     4             if (typeof (argu)=='number') {
     5                 alert(argu * 2);
     6             } else {
     7                 alert('非数字');
     8             }
     9         }
    10         fun(2);
    11     </script>>
    typeof()返回变量类型的值。此处的Numeber类型的值为number注意。要加引号!String类型的值为‘string’
      <script>
            //js中的Array想当于动态数组,和哈希表和栈的综合。动态扩展,键值对,有pop.push方法
     var arr_3 = new Array();
            arr_3['李可'] = 20;
            arr_3['小红'] = 18;
            arr_3['小王'] = 21;
            for (var VAR in arr_3) {//for循环对应的是c#中的foreach,对应key不是数字的数组的遍历
            }
                alert(VAR);
               alert(arr_3[VAR]);
            }
        </script>
    for的第二种使用相当与c#foreach。对不是以数字为key的数组的遍历
    <script type="text/javascript">
             //typeof(变量或者表达式或者对象)方法返回的值都是字符串(都需要加引号),有6中值"string"" number""boolen""function""object""undifined"
             var ob = function() {//function
                 this.name = "like";
             }
             alert(typeof (ob));
    
             var arr = [1.2, 6];//"object"
             alert(typeof (arr));
    
             var i;//"undifined"
             alert(typeof (i));
    
             alert(typeof (m)); //"undifined"  之前不能有个空m放前面,会报错。
    
             var a = 1;//"number"
             alert(typeof (a));
    
             alert(typeof (1>2) ); //boolen
    
         </script>
    typeof()完全详解

     调试多alert一下; 打开调试工具---开启调试--设断点-- 刷新网页--添加监视。

    方法 

    定义方法命名 小写字母开头,不和系统方法名重复。方法参数没有类型,return也没有返回值。方法的就进原则。

      <script type="text/javascript">
            function fun() {
                alert('无参数');
            }
            function fun(num) {
                alert(num);
            }
            fun();//会执行第二个fun,就近原则
        </script>
    方法就进原则
    1   <script type="text/javascript">
    2         function fun() {
    3           for (var i = 0; i < arguments.length; i++) {
    4               alert(arguments[i]);//arguments是一个参数数组,在考虑“重载”用arguments。lenth小写.属性方法都小写
    5           }
    6         }
    7         fun('a',1,0,new Date().toLocaleString());
    8     </script>
    arguments参数对象。js属性方法小写。闭包(类)大写
    class Program
        {
            public static void fun(params object[] arObjects)
            {
                for (int i = 0; i < arObjects.Length; i++)
                {
                    Console.WriteLine(arObjects[i]);
                }
                
            }
            static void Main(string[] args)
            {
                fun("a",1,2,3);
                Console.ReadKey();
            }
        }
    相当c#的params object[]数组
       <script>
        // 动态的去创建一个方法,类似委托,有类似创建对象。
        //   大写的Function内参数为字符串!!前面的参数为最后“函数体的”参数。!!
                var fangfa = new Function("i1","i2", "return i1+i2;");
                alert(fangfa(1, 2));
            </script>   
    动态创建方法,和创建类似,和委托形式类似,Function(”“”“”“)
    <head>
        <title></title>
        <script type="text/javascript">
            //window.onload=function(){}把方法写到里面,要先加载好html后执行。否则,html节点都没加载好,也不会找到geElement等。//也可以不写进。写一个方法,在html节点写事件=“方法();”
            //getElementById()里面引号,得到的var变量表示这个节点。以后操作这个变量,而不是()里的id  。var p = document.getElementById("p1");  var p = document.getElementById("p1").value;
            //方法名()是调用。只有方法名,没有()是判断这个方法存在与否,常常if(方法名),判断方法是否存在,预留后路。注意木有()哦。
            window.onload = function () {
                //            var p = document.getElementById("p1");
                //            p.appendChild(document.createTextNode("dddddd")); //一段字,也是一个特殊节点。创建方法和创建其他节点不同document.createTextNode("文本")//document.createElement("p");
                //            alert(p.getAttribute("id"));
                //            p.setAttribute("id", "44");
                //            alert(p.getAttribute("id"));
                //            var i2 = document.getElementById("wen").value;
                //            alert(i2);
    
    
                //            var b = document.getElementsById("aa"); // body节点对象不支持“getElementsById”属性或方法
    
    
    //            var pa = document.getElementById("p1");
    //            var pa1 = document.createElement("input")
    //            pa.parentNode.insertBefore(pa1, pa);//里面逗号写中文的了,出异常了
            }
        </script>
    </head>
    <body id="aa">
        <p id="p1">222</p>
        <input type="text" name="name" value="111" id="wen" />
        <input type="button" name="name" value="点击添加 "  /><!--onclick="zhuijia();"-->
    </body>
    </html>
    onload doc.get().value/createEle/createTextNode get/set/Attri 父节点变量.insertBefore(new,old) 节点变量.parNode

      var b = document.getElementsByTagName("body")[0]

    追加方法,实现模块化

    <script type="text/javascript">
            window.onload = function () {
            }
            //给一个方法追加另一个方法  要求:模块化,方法不嵌套。
            //例子:给onload方法写一个加方法的追加方法。
            function addonload(fun) {//将一个方法字段名传进去。
                var oldonload = window.onload;//将onload字段赋值给新的一个字段,让这个新字段指向方法体。当运行新字段();就可以运行老方法。
                if (typeof (oldonload) != 'function') {//没有给onload注册方法,直接给onload运行fun
                    window.onload = fun;
                }
                else {//里面有方法,执行,并追加一个新方法;
                    oldonload();
                    fun();
                }
            }
            function fangfa() { }
            addonload(fangfa);//以后就不用onload 只用addonload就可以了,达到了模块化的目的
        </script>
    追加方法,实现模块化 ,类似 方法+=方法

    计时器

        <script type="text/javascript">
            function getvalue() {//
                var txt = document.getElementById("t").value; //取文本框值
                txt = parseInt(txt) + 1; //转化一下 parseInt
                document.getElementById("t").value = txt; //给文本框赋值
            }
            onload = function () {
                var id = window.setInterval(getvalue, 1000); //计时器动作返回一个计时器的引用id,关掉 clearInterval(id)
                //动态给btn添加点击暂停继续事件
                document.getElementById("zan").onclick = function () { window.clearInterval(id); };
                document.getElementById("jixu").onclick = function () { window.setInterval(getvalue, 1000); };
            }
        </script>
    </head>
    <body>
        <input type="text" name="txt" value="1" id="t" />
        <input type="button" name="btn" value="计时暂停" id="zan" />
        <input type="button" name="btn1" value="计时继续" id="jixu" />
    </body>
    var i=window.set(fun,time)/clearInterval(id)

    匿名方法

    类似c#委托变量指向一个匿名函数,这个委托变量就可以当成一个函数来用。在jquery中应用极为广泛。区别,一个function关键字,一个delegate关键字。

     <script>
                var i = function(num1,num2){return num1+num2};//犯的错,函数加双引号了当成属性了
                alert(i(1, 2));//此处用“委托变量”+参数
            </script>
    变量赋参数调用没名的函数,匿名函数
      public delegate void delfun();
        class Program
        {
            static void Main(string[] args)
            {
                delfun delbianliang = delegate() { Console.WriteLine("委托变量调用此delegate开头的匿名函数"); };
                delbianliang();
            }
        }
    c#中匿名函数。委托变量调用此delegate开头的匿名函数

    Lambda表达式

    c#就是一个省去关键字delegate和返回这的匿名函数。

      public delegate void delfun();
        class Program
        {
            static void Main(string[] args)
            {
                delfun delbianliang = delegate() { Console.WriteLine("委托变量调用此delegate开头的匿名函数"); };
                delbianliang();
                delfun debianliang2 = () => { Console.WriteLine("Lambda表达式(省去delegate return字的匿名函数的调用)"); };//没参数就写一个()==>省去关键字的麻烦
                debianliang2();
                Console.ReadKey();
            }
        }
    Lambda:省去delegate关键字的匿名函数。就是更简练匿名函数

    js扩展方法

        <script>
            String.prototype.addkuozhanming= function() {//this表示这个对象。对象.prototype.扩展方法名=匿名函数
                return  this+".str" ;
            }
            var name = 'llike';
          alert(name.addkuozhanming());
        </script>
    对象.prototype.扩展方法名=匿名函数

    undifined null

        <script type="text/javascript">
    //        null为object类型的值       undifined为Undifined类型的值      null undifined 0 false 均为false,数值 字符串均为true
            if ("asdasd") {//
                alert('true');
            } else {
                alert('false');
            }
    
    
    //        undifined的几种情况     "undifined"为String类型的值。String类型的值还有"number" 等6中”“类型   不要和Number类型弄混淆.
    //        在上面typeof()方法中已经详解String的6个返回”“类型。
            var num;//1,声明但没有初始化
            alert(num);//输出undefined
            alert(typeof (sth));//2,对没声明的变量 typeof时候。输出undefined
            function add(i1,i2) {//3,方法没有返回值会返回undifined
                i1 + i2;
            }
            alert(add(1, 2));//输出undefined
    
    
    //        null没有值,可以赋值给变量,表示不存在的对象, 是一个值相当与 1  2 3 
            var a = null;
            alert(typeof (a));//为”object“
    
    
            
            //下面可以判断其类型(对应String的”undefined“)或者直接看值是否和undefined相等。这两种做法一样
              var m;
            if (typeof(m)=="undefined") {
                alert(2);
            }
            var n;
            if (n==undefined) {
                alert(3);
            }
    
            //  但在if()条件中,和null判断相等也能执行。这点只是因为一些兼容的问题导致的。
            var m;
            if (m == null) {
                alert(1);//输出1
            } else {
                alert(2);
            }
    
            var m;//此种方法整名,为赋值的变量不等null而等undefined
            if (typeof (m)=="null") {
                alert(1);
            } else {
                alert(2);//输出2
            }
    
    //因为兼容性,有木有区分到底的方法呢?答案是有的。就是===绝对相等
            var m;
            if (m===null) {
                alert(1);
            } else {
                alert(2);//输出2
            }
    
            var m;
            if (m===undefined) {
                alert(1);//输出1
            } else {
                alert(2);
            }
        </script>
    详解undefined null两值的区分。和typeof()返回String类型对应的“undefined” “object”区别 ===

    对象

    如何使用js实现一个对象

     <script>
            //第一种方法定义个一“类”闭包,有点像构造函数。
                function person(name, age, sex) {
                    this.Name = name;
                    this.Age = age;
                    this.Sex = sex;
                    this.act = function() { alert("动作") };//任意增加一个属性或者动作,指向一个匿名函数。
                }
    
                var li=new person('李可',18,'男');
                alert(li.Age + li.Sex + li.Name);
                li.act();
    
                li.height = 180;//new出这样一个对象后,也可以动态扩展增加其对象的属性。类似动态函数
                alert(li.Age + li.Sex + li.Name + li.height);
    
    
    
    
              //第二种方法,先定义这样的一个空类, 在后面动态添加就ok
                function animal() {
    
                }
                var dog = new animal();
                dog.Name = "旺旺";
                dog.Age = 3;
                dog.act = function () { alert('汪汪') };
    
                alert(dog.Age + dog.Name);
                dog.act();
                alert(dog['Age'] + dog['Name']);//用【】来访问,和.的意义一样的,此种和字典数组很类似,就是对象和数组,键值对的统一。
               
            </script>
    对象定义两种方法,访问.[]两种方法,和数组等键值对的统一

    数组

    <script>
            //js中的Array想当于动态数组,和哈希表和栈的综合。动态扩展,键值对,有pop.push方法
    
            var arr_0 = [5, 10, 5156, 5165, 9999, 161];
            var arr=['li','wang','zhang'];
            //定义“动态数组”的简单形式。相当与c#中的ArrayList
            var arr_1 = { "李可": 20, "小红": 18, "小王": 21 }; //定义“键值对”的简单形式相当于c# 哈希和字典
                  
            var arr_02 = new Array();//也可以固定长度new Array(n);
            arr_02[0] = 1;
            arr_02[1] = '小可';
            arr_02[2] = "男";
            alert(arr_02.join('|'));//jion方法比徐处理的字符串数组,里面包含数字都不能处理 下面有实例
            for (var i = 0; i < arr_02.length; i++) {//for 对应的key为数字的数组的遍历
            alert(i); //对应的“动态数组”alert的是索引,可以arr_02[i]输出值。后面的“键值对”的“哈希字典”alert的是key还是value注意一下。
    
            var arr_3 = new Array();
            arr_3['李可'] = 20;
            arr_3['小红'] = 18;
            arr_3['小王'] = 21;
            alert(arr_3.join("|")); //此时不能jion方法,显示不出来
            for (var VAR in arr_3) {//for循环对应的是c#中的foreach,对应key不是数字的数组的遍历
            }
                alert(VAR);
               alert(arr_3[VAR]);
            }
        </script>
    数组.键值 简单定义机分别for for in遍历。js的数组动态,键值及栈pop push
  • 相关阅读:
    POJ 1082 博弈推规律
    博弈论总结
    POJ 2502 Subway 关键在建图
    【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
    一位ACMer过来人的心得
    POJ1724 Dij队列优化邻接表
    Dijkstra队列优化矩阵版
    Uva247 Floyd传递闭包+map处理
    简爬新浪新闻网
    爬href链接
  • 原文地址:https://www.cnblogs.com/leee/p/4279393.html
Copyright © 2011-2022 走看看