0005 Javascript知识点

001 概述

概述:一门客户端脚本语言
    运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎
    脚本语言:不需要编译,直接就可以被浏览器解析执行了

 

002 功能

  可以来增强用户和html页面的交互过程
       可以控制html元素
       能够让页面有一些动态的效果
      增强用户的体验

003 发展史

    1. 1992年 NNombase公司了,开发出第一门客户端脚本语言,专门用于表单的校验 命名为C--,后来更名为ScriptEase
    2. 1995年 Netscape(网景)公司,开发了一门客户端脚本语言:livescript,后来请了SUN公司的专家,修改之后命名为JavaScript
    3. 1996年,微软抄袭JavaScript,并开发了JScript
    4. 1997年,ECMA(欧洲计算机制造商协会),ECMAScript,即使所有客户端脚本语言的标准

    JavaScript = ECMAScript + JavaScript特有的东西(BOM+DOM)

004 ECMAScript基本语法

  ECMAScript:客户端脚本语言的标准

4.1 与html结合方式

       01 内部js
                定义<script>,标签体内容就是js代码
       02 外部js
                    定义<script>,通过src属性引入外部的js文件
            注意:
                1. <script>可以定义在html页面的任何位置,但是定义的位置会影响到执行的顺序(从上到下依次执行)
                2. <script>可以定义多个。

  案例01:与html结合方式(按顺序执行,从上向下)

          a.js
          alert("我是外部的js文件");
          b.html
          <html>
          <head>
             <!-- 内部js -->
             <script>
                 alert("我是内部的js代码");
             </script>
             <!-- 外部引入的js文件 -->
             <script src="a.js" ></script>
           </head>
           <body></body>
           </html>                

4.2 注释

                单行注释: //
                多行注释: /*注释内容*/

4.3 数据类型

                1. 原始数据类型(基本数据类型)
                    1) number: 数字。整数/小数/NaN(not a number 一个不是睡着的数字类型)
                    2) string: 字符串。 字符串“abc”, "a",'abc'
                    3) boolean: true和false
                    4) null: 一个对象为空的占位符
                    5) undefined: 未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
                2. 应用数据类型:对象

4.4 变量

                    变量:一小块存储数据的内存空间(被命名的内存空间,用来存储数据)
                    java原因是强类型语言,JavaScript是弱类型语言
                        强类型:在开辟变量存储空间时,定义了空间将来存储数据的数据类型,只能存储固定类型的数据
                        弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据
                    语法:
                        var 变量名 = 初始化值;
                        var a = 10;

                    查询变量的数据类型 typeof(a);

4.5 运算符

                1. 一元运算符: 只有一个运算数的运算符
                    ++(自增),--(自减),+(正号),-(负号)
                        ++(--)在前,先自增(自减),再运算
                        ++(--)在后,先运算,再自增(自减)
                    注意:
                        1. 在js中,如果运算数不是运算符所要求的类型,那么js引擎会自动将运算数进行类型转换
                         其他类型转换为number
                             string转number,按照字面值转换,如果字面值不是数字,则转为NaN(不是数字的数字)
                                 alert(typeof(+"abc"))  //NaN
                             boolean转number:true转为1,false转为0;
                2. 算数运算符:
                    +, -, *, /, % ...
                3. 赋值运算符
                    = += -= ...
                4. 比较运算符
                    >, <, >=, <=, ==, ===(全等于)
                    比较方式:
                        1. 类型相同,直接比较
                            * 字符串:按照字典顺序比较,按位逐一比较,知道得出大小为止(ASCII)
                            如: "abc" > "acd"  -->false
                        2. 类型不同呢,先进行类型转换,然后再比较
                            “112” < 123---->true
                        3. "==="全等于:在比较之前,先判断类型,如果类型不一样,则直接返回false
                            “123” === 123 ----> false
                5. 逻辑运算符
                    &&, ||, !
                    &&: 与(短路效果),短路,只要前面的表达式为假,那么后面的表达式就不执行了,直接返回假
                    ||: 或(短路效果)。 短路,只要前面的表达式为真,那么后面的表达式就不执行了,直接返回真
                    !: 非
                        其他类型转boolean
                            1. number: 0或NaN为假,其它为真
                            2. string: 除了空字符串(""),其他都是true
                            3. null&undefined:都是false
                            4. 对象:所有对象都是true(例如: var date = new Date();)
                            例如:
                                //js中可以这样来简化书写
                                if(obj){}//防止空指针异常,如果是对象,正常执行;如果不是对象,直接返回false
                6. 三元运算符
                    ? :
                        语法:
                            表达式?值1:值2;
                            判断表达式的值,如果是true则取值1,如果是false则取值2;
                        例如:
                            var a = 3;
                            var b = 1;
                            var c = a > b ? 1:0;
                7. JS特殊语法(都不建议使用,最好还是按照正常的逻辑来写):
                    1. 语句以“;”结尾,如果一行只有一条语句则“;”可以省略(不用知道,不建议使用)
                    2. 变量的定义需使用关键字var,也可以不用
                        使用var,定义的变量是局部变量        如:var a = 4;
                        不使用var,定义的变量是全局变量    如: a = 5;(不建议使用)

4.6 流程控制语句

                1. if...else...
                2. switch
                    在java中,Switch语句可以接收的数据类型: byte,int , short, char, 枚举(1.5), string(1.7)
                        switch(变量){case 值1: 语句; break;}
                    在JavaScript中,Switch语句可以接受任意的原始数据类型
                        例如: var a ="";
                                switch(a){
                                    case 1: alert("number"); break;
                                    case "abc": alert("string"); break;
                                    case true: alert("true"); break;
                                    case null: alert("null"); break;
                                    case undefined: alert("undefined"); break;
                                }
                3. while
                4. do...while
                5. for
                    例如:
                            var sum = 0;
                            for(var i = 1; i<=100;i++){
                                sum += i;
                            }

005 基本对象

  5.1 Function:函数(方法)对象

                1. 创建
                    1. var fun = new Function(形式参数列表,方法体);【了解即可,现在可以忘掉了】
                    例如:
                        var fun1 = new Function("a","c","alert(a);");
                    2. function 方法名称(形式参数列表){方法体;}
                    例如:
                        function fun02(a,b){
                            alert(a+b);
                        }
                    3. var 方法名称 = function(形式参数列表){方法体;}
                    例如:
                        var fun03 = function(形式参数列表){
                            alert(a+b);
                        }

                2. 方法

                3. 属性
                    length:代表形参的格式
                    例如: alert(fnu02.length);

                4. 特点
                    1. 方法定义时,方法的形参类型可以不用写,返回值类型也可以不用写
                    2. 方法是一个对象,如果定义名称相同方法的话,会直接覆盖前一个方法;
                    3. 在JS中,方法的调用只与方法的名称有关,和参数列表无关【重要】        如:fun02(),可以;fun02(1),也可以
                    4. 在方法声明中有一个隐藏的内置对象(数组),arguments,封装了所有的实际参数  如:fun02(1,2,3),也可以,最后一个不显示
                        例如:求任意个数的和
                        function(){
                            var sum = 0;
                            for(var i = 0; i < arguments.length; i++){
                                sum += arguments[i];
                            }
                            return sum;
                        }

                        var sum = add(1,2,3,4,5,7,9);
                        alert(sum);

                5. 调用
                    方法名称(实际参数列表);
                    例如:
                        fun1(3,4);

  5.2 Array:数组对象

                1. 创建
                    1)var arr = new Array(元素长度);    如var arr = new Array(1,2,3,4);---->1,2,3,4
                    2) var arr = new Array(默认长度);    如var arr = new Array(5);------->,,,,
                    3) var arr = [元素列表];             如var arr = [1,2,3,4];----------->1,2,3,4


                2. 方法
                    join(参数):将数组中的元素按照指定的分隔符(参数)拼接为字符串
                    push(): 向数组的尾部添加一个或多个元素,并返回新的长度        如:arr.push(11);

                3. 属性
                    length: 数组的长度

                4. 特点
                    1) 在JS中,数组元素的类型是可变的    如var arr = [1,"abv",true];
                    2) 在JS中,数组元素的长度是可变的    如arr[10];-->undefined

  5.3 Date:日期对象

                1. 创建
                    var date new Date();

                2. 方法
                    toLocalString():返回当前date对象对应时间的本地字符串格式
                    getTime(): 获取毫秒值,返回当前日期对象描述的时间到1970年1月1日零点的毫秒值之差

  5.4 Math:数学对象

                1. 创建
                    特点:Math对象不用创建,直接使用  Math.方法名();

                2. 方法
                    random():返回0~1之间的随机数;[包含0,不包含1] 如Math.randim();
                    ceil(x): 对数字进行上舍入(向上取整)Math.ceil(3.14)-->4
                    floor(x): 对数字进行下舍入(向下取整)Math.ceil(3.14)-->3
                    round(x): 把数字四舍五入为最接近的整数

                3. 属性
                    PI 圆周率 如:Math.PI;

                练习:取1~100之间的随机整数
                        1. 取随机数,然后乘以100
                        2. 舍去小数部分
                        3. +1
                    var number = Math.floor(Math.random() * 100) +1;

  5.5 RegExp;正则表达式对象

                1. 正则表达式:定义字符串的组成规则
                    1. 单个字符:[]
                        如: [a] [ab](表示a或b都行) [a-zA-Z0-9]
                        特殊符号代表含义的单个字符:
                        \d:单个数字字符 [0-9]
                        \w:单个单词字符[a-zA-Z0-9_] 表示:小写字母+大写字母+数字+下划线都行

                    2. 量词符号
                        ?: 表示出现0次或1次
                        *: 表示出现0次或多次
                        +: 表示出现1次或多次
                        {m,n}:表示 m <= 数量 <= n
                            m如果缺省: {,n}: 最多n次
                            n如果缺省: {m,}: 最少m次
                    3. 开始结束符号
                        ^: 开始
                        $: 结束
                2. 正则对象
                    1. 创建
                        1)var reg = new RegExp("正则表达式");
                        2) var reg = /正则表达式/;【常用】
                        注意:
                            使用第一种的时候需要多加一个“\”,不然容易转义成其他意思

                    2. 方法
                        1) test(参数):验证指定的字符串是否符合正则定义的规范
                例如:
                    var reg = new RegExp("^\\w{6,12}$");//或者var reg2 = /^\w{6,12}$/;//基本用第二种方式
                    使用第一种需要多加一个"\",不然会直接转义成其他意思
                    var username = "sahnghai";
                    //验证
                    var flag = reg.test(username);
                    alert(flag);//-->true

  5.6 Global: 全局对象

                1. 特点: 这个Global中封装的方法不需要对象就可以直接调用 方法名();
                2. 方法:
                    encodeURI():url编码
                    decodeURI():url解码

                    encodeURIComponent(): url编码,编码的字符更多
                    decodeURIComponent(): url解码,

                    parseInt():将字符串转为数字
                        逐一判断每一个字符是否为数字,直到不是数字为止,将前面数字部分转为number

                    isNaN: 判断一个值是不是NaN
                        NaN六亲不认,连自己都不认,NaN参与的==比较,全部都是false

                    eval():将JavaScript字符串,并把它转为脚本代码来执行
                    例如:
                        var jscode = "alert(123)";
                        eval(jscode);

006 DOM简单学习

  为了满足案例要求

        功能:控制html文档的内容
        代码:获取页面标签(元素)对象Element
            document.getElementById("id值"):通过id值来获取元素对象
        操作Element对象
            1. 修改属性值
                1) 明确获取的对象是哪一个
                2) 查看API文档,找到其中有哪些属性可以设置
            2. 修改标签体内容
                属性:innerHTML

    案例:

	<body>
	<img id="light" src="img/off.gif">
	<h1 id="title">阿里巴巴</h1>
	<script>
		//通过id获取元素对象
		var light = document.getElementById("light");
		alert("我要换图片了...");
		//修改属性值
		light.src = "img/on.gif";
		//1. 获取h1标签对象
		var title = document.getElementById("title");
		//2. 修改内容
		title.innerHTML = "京东";
	</script>
	</body>

 007 事件简单学习

        功能: 某些组件被执行了某些操作后,触发某些代码的执行
            造句:XXX被XXX,我就XXX;
            我方水晶被摧毁之后,我就责备队友

        如何绑定事件
            1.直接在html标签上指定事件的属性(操作),属性值就是js代码
                1) 事件:onclick() ---> 单击事件
            2. 通过js获取元素对象,指定事件属性,并设置一个函数;
        案例01:

	<head>		
	</head>
	<body>
		<img id="light" arc="off.gif" onclick="fun();">
		<img id="light02" arc="off.gif">
		<script>
			//第一种方法:对img代码侵入,耦合度比较高
			function fun(){
				alert("我被点了");
			}
			function fun02(){
				alert("老是点我");
			}
			//第二种方法
			//1. 获取light02的对象
			var light02 = document.getElementById("light02");
			//2. 绑定事件
			light02.onclick = fun02()
		</script>
	</body>

 008 案例:通过点击电灯图片来实现灯的亮灭

	//1. 获取图片对象
	var light = document.getElement("light");

	var flag = false;//代表灯是灭的,off是灭灯的图片
	//2. 绑定事件
	light.onclick = function(){
		if(flag){//判断如果灯是开的,则灭掉

			light.src="off.gif";
			flag = false;
		}else{//判断如果灯是灭的,则打开
			light.src="on.gif";
			flag = true;
		}
	}

 

posted on 2022-05-24 14:40  zzq156  阅读(25)  评论(0编辑  收藏  举报