JS (JavaScript)

Posted on 2020-04-18 21:46  金色的省略号  阅读(936)  评论(0编辑  收藏  举报

  一、JavaScript,运行于JavaScript解释器中的,解释型脚本语言

  1、JavaScript主要用途  :JavaScript主要读写HTML元素、在网页中嵌入动态文本、动态修改CSS样式表;对浏览器事件做出响应、表单数据验证、检测访客的 浏览器信息等;

  2、JavaScript的相关应用验证数据;页面特效;数值计算;动态页面效果

  3、JavaScript位置  我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分;放在<head>部分,最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分;放在<body>部分,JavaScript代码在网页读取到该语句的时候就会执行。

  4、JavaScript引用方式 :1、使用<script>标签在HTML文件中添加JavaScript代码;2、单独创建一个JavaScript文件(简称JS文件),其文件后缀通常为.js,然后将JS代码直接写在JS文件中,在HTML中添加如下代码,就可将JS文件嵌入HTML文件中,<script src="script.js"></script> ;3、放置在HTML标签以on开头的属性即事件处理程序中;

  5、JavaScript输出  :1、 使用Windows.alert()弹出警告框;2、使用Document.write()方法将内容写到HTML文档中( document对象,代表整个HTML 文档,可用来访问页面中的所有元素 );3、使用innerHTML写入到HTML元素;4、使用console.log()写入到浏览器的控制台;

  6、一个完整的JavaScript实现,应该由以下三个部分组成:1、核心,ECMAScript;2、文档对象模型,DOM,document object model;3、浏览器对象模型,BOM,browser object model;

  通过核心对象,DOM对象,BOM对象,作用于HTML元素 

  二、JavaScript核心

  1、数据类型,JavaScript数据类型有以下几种:数值型:数字可以带小数点,也可以不带;字符串型:用引号包围的文本;布尔型:只有两个取值,true false,非0或非空为true;null类型:表示从未赋值的值,只有一种取值null,引用一个没有定义的变量,返回null;undefined类型:专门用来确定一个已经创建但是没有初值的变量;

  数值型,在JavaScript中,所有的数字都是浮点型; 

  当一个数字直接出现在JavaScript程序中时,被称为数值直接量,JavaScript支持的数值直接量有整型数据、十六进制和八进制数据、浮点型数据,注意,负号,是一元求反运算符,不是数值直接量的一部分;

  toFixed() 方法,可把number四舍五入为指定小数位数的数字,返回值为string类型,typeof,查看数据类型

   字符串型,字符串string 是由Unicode字符、数字 、标点 符号等组成的序列,它是JavaScript用来表示文本的数据类型;

  字符串型的数据包含在单引号和双引号中;由单引号定界的字符串中可以包含双引号,由双引号定界的字符串中也可以包含单引号;可以采取内双外单的形式让输出的字符串带双引号,如果外双的形式,让字符串带双引号,可以采取转义字符  \"  ;字符串可以用+号进行连接运算;

  布尔型,布尔数据类型只有两个值,这两个合法的值分别由直接量true和false表示,它表示某个事物是真或假;

  JavaScript在必要的时候,将true转化为1,将false转化为0

  null类型,null,它表示值为空,用于定义空的或者不存在的引用;如果引用 一个没有定义的变量,则返回一个null值,null不等同于空字符串和0;

  未定义类型,未定义类型的变量是undefined,表示变量还没有赋值,或者赋予一个不存在的属性值,此外,JavaScript中还有一种特殊类型的数字常量NaN,即“非数字”,当程序由于某种原因计算错误后,将产生一个没有意义的数字,此时JavaScript返回的数值就是NaN

  null undefined的区别是,null表示一个变量被赋予一个空值,而undefined则表示该变量尚未被赋值

  转义字符型,以反杠开头的,不可显示的特殊字符通常称为控制字符,也被称为转义字符;在document.write( )语句中使用转义字符时,只有将其放在格式化文本标签<pre></pre>中才会起作用

  Object类型,复合数据类型;值为基本数据类型的组合;

  复合数据类型,json的遍历

  JavaScript JSON,JSON 英文全称 JavaScript Object Notation,是独立的语言,用于存储和传输数据的格式,通常用于服务端向网页传递数据;

  JSON 语法规则:数据为 键 / 值 对;数据由逗号分隔;大括号保存对象;方括号保存数组

  JSON 格式化后为 JavaScript 对象,JSON 格式在语法上与创建 JavaScript 对象代码是相同的,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象; 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script>        
            var text = '{ "sites" : ['   +  
                       '{ "name":"Runoob" , "url":"www.runoob.com" },' +  
                       '{ "name":"Google" , "url":"www.google.com" },' +    
                       '{ "name":"Taobao" , "url":"www.taobao.com" } ]}'; 
            
            document.writeln(typeof text + "<br/>"); 
            
            var obj = JSON.parse(text);
            document.writeln(typeof obj.sites + "<br/>");
            
            /* obj = obj.sites;
            for(var i=0; i<obj.length; ++i){
                document.write(obj[i].name + " " + obj[i].url + "<br/>") ;                
            } */
            for(var i=0; i<obj.sites.length; ++i)
                document.write(obj.sites[i].name + " " + obj.sites[i].url + "<br/>") ;    
        </script>
    </body>
</html> 

  数据类型的自动转换,当字符串与其它类型用+连接,其它类型会转为字符串,其它的运算符-,*,/,%都会转换成Number类型;数据类型的强制转换,parseInt(),parseFloat()函数;

  typeof运算符, 把类型信息用字符串返回,返回值有6种,number, string, boolean, object, undefined, function

  2、变量,变量的主要作用是存取数据,提供存放信息的容器;JavaScript 是弱类型语言,对变量的定义不需要声明变量类型;JavaScript的变量是动态类型,相同变量可用作不同的类型;变量可以用关键字var显式声明,隐式声明的变量为全局变量;使用var可以同时声明多个变量,变量可以赋值(可以是不同数据类型值),也可以不赋值,只声明未赋值的变量,默认值为undefined;

  3、函数,函数的定义是使用function关键字实现的,格式如下:

function 函数名(形式参数列表){
    函数体语句块;
}

  函数与其他JavaScript一样,必须位于<script></script>标记之间;函数可以有返回值吗,也可以没有返回值,返回值是通过return关键字加表达式实现的;函数的调用:作为函数直接调用;作为对象的方法调用;作为构造函数; 通过call和apply方法间接调用;

  JavaScript 能够在事件发生时执行,因此,HTML DOM 事件可以调用函数,比如onmouseover事件;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <p id="bgcolor" onmouseover="myfunction()" style="background-color: red;color:#FFFFFF;">鼠标指上面改变背景色</p>
        
        <script>        
            function myfunction(){
                var element=document.getElementById("bgcolor");
                if(element.style.backgroundColor.match("red")){
                    element.style.backgroundColor = "blue";
                    element.style.color = "#FFFFFF";
                    element.innerHTML = "鼠标再指上面改变背景色";                
                }
                else{
                    element.style ="background-color: red;"; 
                    element.style.color = "#FFFFFF";
                    element.innerHTML = "鼠标指上面改变背景色";
                }                    
            }
        </script>
    </body>
</html>

  变量的作用域

    <script>
       var a = "全局变量";
       function myfun(){
           document.write(a);
           var a = "内部变量";
           document.write(a);
       }
       myfun();
       document.write(a);
    </script>

  图片切换 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>图片切换</title>
    </head>
    <style>
        #image{
            display: block;
            width: 500px;
            height: 180px;
            margin: 10px auto;
        }
        #next{
            margin-left: 350px;
        }
    </style>
    <body>
        <img src="./images/1.gif" id="image" />
        <button id="next">next</button>
        <button id="prev">prev</button>
         
        <script>
            var image = document.getElementById('image');
            var next = document.getElementById("next");
            var prev = document.getElementById('prev');
            var nowIndex = 1;
            var count = 6;
             
            next.onclick = function(){
                nowIndex = nowIndex+1>count?1:nowIndex+1;
                image.src = "img/"+nowIndex+".jpg";  
            }
            prev.onclick = function(){
                nowIndex = nowIndex<=1?count:nowIndex-1;
                image.src = "img/"+nowIndex+".jpg";               
            }   
        </script>
         
    </body>
</html>

  4、控制语句,控制语句,if,if else,switch,while,for,try catch

  try catch

    <script>
        var txt="";
        function message()
        { 
            try { 
                adddlert("Welcome guest!"); //函数名错误
            }
            catch(exception) 
            { 
                txt="本页有一个错误。" + "<br/>";
                txt+="错误描述:" + exception.message + "<br/>";
                document.write(txt);
            }
        } 
        message();
    </script>

  猜数字

    <script>
        var num = Math.floor(Math.random() * 100 + 1); //产生1~100之间的随机整数
        do {
            var guess = parseInt(prompt("下面进行猜数游戏\n请输入1-100之间的整数:", ""));
            if (guess == num) {
                alert("^_^ ,恭喜你,猜对了,幸运数字是:" + num);
                break;
            } else {
                if (guess > num) {
                    alert("^_^ ,你猜的数字大了");
                    go_on = confirm("是否继续游戏?");
                } else {
                    alert("^_^ ,你猜的数字小了");
                    go_on = confirm("是否继续游戏?");
                }
            }
        } while (go_on);
        alert("谢谢参与游戏!");
    </script>

  九九乘法口诀表

<table border="0" cellpadding="6" style="border-collapse:collapse;background-color:#FFFFFF;">
<script> 
for (var i = 1; i < 10; i++) {
    document.write("<tr>");
    for (j = 1; j < 10; j++)
        if (j <= i)
            document.write("<td style='border:2px solid #004B8A;color: #; background:#ff5500;'>" + 
            i + "*" + j + "=" + (i * j) + "</td>");
    document.write("</tr>");
}
</script>
</table>

  5、JavaScript 对象

  JavaScript 对象

  Array,Boolean,Date,Math,Number,String,RegExp,Functions(Global,顶层函数及其属性),Events(事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行);

  Array对象,(数组,索引数组,关联数组,数组API函数)

  Array对象prototype属性,使您有能力向对象添加属性和方法很有意思,添加属性语法:object.prototype.name=value;

        <script type="text/javascript">
            function employee(name,job,born)// 构造函数
            {
                this.name=name;
                this.job=job;
                this.born=born;
            }
            // 创建bill对象
            var bill = new employee("Bill Gates","Engineer",1985);
            
            employee.prototype.salary=null; // 添加了salary属性
            bill.salary=20000; // 属性赋值
            
            document.write(bill.salary);
        </script>
employee.prototype.show = function() {console.log("prototype添加show方法");}

  Date对象,Date对象用1表示一个月中的第一天,但用0表示一年中的第一个月;JavaScript定时器方法之一,Date对象的:setTimeout()方法 (另外一个方法Window对象的:setInterval() 方法);

  RegExp对象,正则表达式test方法,语法:RegExpObject.test(string)

        <script type="text/javascript">
            var str = "Visit phpStudy";
            var patt1 = new RegExp("phpStudy");
            
            var result = patt1.test(str);
            
            document.write("Result: " + result);
        </script>

  三、DOMHTML接口

  什么是DOM,document object model,是W3C标准,文档对象模型,它允许程序和脚本动态地访问和更新文档的内容、结构和样式,对网页进行增删改查的操作。

  HTML DOM 定义了访问和操作HTML文档标准方法

  HTML DOM 对象

  Document,Anchor,Area,Base,Body,Button,Canvas,Event,Form,Frame,Frameset,IFrame,Image,Input Button,Input Checkbox,Input File,Input Hidden,Input Password,Input Radio,Input Reset,Input Submit,Input Text,Link,Meta,Object,Option,Select,Style,Table,TableCell,TableRow,Textarea; 

  四、BOM,专门操作浏览器窗口的API;

  Browser 对象

  Window,Navigator,Screen,History,Location;

  Window的prompt()方法,返回值类型string;parent是window对象的属性,返回父窗口;

  五、浏览器内核的作用 :1、内容排版引擎解析,html和css;2、脚本解释引擎解析,js;

  六、查找元素对象,方法:
  1、按id属性,精确查找一个元素对象

var elem = document.getElementById("id");
//只能用在document上,查找一个元素,不是所有的元素都有id

  2、按标签查找

var elems = parent.getElementsByTagName("tag");
//查找指定parent结点下的所有标签为tag的子代结点

  可用在任意父元素上,查所有子代结点,返回也给动态集合,只找到一个元素,用[0]取出

  3、通过name属性查找

var elem = document.getElementsByName('name属性值');
//可以返回DOM树中具有指定name属性值的所有子元素集合

  4、通过class查找

var elems = parent.getElementsByClassName("class");
//有兼容性问题ie9
var div = document.getElementById('news');
var list = div.getElementsByClassName('mainTitle');

  5、通过CSS选择器查找

var elem = parent.querySelector("selector");
//只找一个元素,selector支持一切css中选择器,如果选择器匹配多个,只返回第一个
var elems = parent.querySelectorAll("selector");
//找多个,selector API返回的是非动态集合