JavaScript

206 阅读16分钟

JavaScript

前言

该笔记来源于 黑马传智2020最新 以及 传智Javaweb ,此笔记是我将两者的综合而成

1. JavaScript的简介

1.1 概念

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

  • 是基于对象和事件驱动的语言,应用于客户端。 ​ 基于对象:提供好了很多对象,可以直接拿过来使用 ​ 事件驱动:html做网站静态效果,javascript动态效果 ​ 客户端:专门指的是浏览器

1.2 JavaScript的特点

(1)交互性 ​ 信息的动态交互

(2)安全性 js不能访问本地磁盘的文件

(3)跨平台性 java里面跨平台性,虚拟机 只要能够支持js的浏览器,都可以运行

1.3 javascript和java的区别(雷锋和雷峰塔)

(1)java是sun公司,现在oracle;js是网景公司

(2)JavaScript 是基于对象的,java是面向对象

(3)java是强类型的语言,js是弱类型的语言 比如java里面 int i = "10"; js: var i = 10; var m = "10";

(4)JavaScript只需解析就可以执行,而java需要先编译成字节码文件,再执行。

1.4 JavaScript的组成

javascript的组成(下面js) 三部分组成:

(1)ECMAScript ECMA : 欧洲计算机协会 由ECMA组织制定的js的语法,语句.....

(2)BOM broswer object model: 浏览器对象模型

(3)DOM document object model:文档对象模型

2.基本语法

2.1 js和html的结合方式(两种)

第一种: ​ 使用一个标签 script type="text/javascript"> js代码; </script>
第二种: 使用script标签,引入一个外部的js文件 创建一个js文件,写js代码 <script type="text/javascript" src="1.js"></script> 使用第二种方式时候,就不要在script标签里面写js代码了,不会执行。

3.2 注释

单行注释://注释内容

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

3.3 数据类型

原始数据类型(基本数据类型)

  • number:数字。 整数/小数/NaN(not a number 一个不是数字的数字类型)
  • string:字符串。 字符串 "abc" "a" 'abc'
  • boolean: true和false
  • null:一个对象为空的占位符
  • undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined

引用数据类型:对象

3.4 变量

  • 变量:一小块存储数据的内存空间

  • Java语言是强类型语言,而JavaScript是弱类型语言。

    强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据.
    弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。

  • 语法:var 变量名 = 初始化值;

  • typeof运算符:获取变量的类型。(注:null运算后得到的是object)

3.5 运算符

  • 一元运算符:只有一个运算数的运算符 ++,-- , +(正号)
    ++ --: 自增(自减)
    ++(--) 在前,先自增(自减),再运算
    ++(--) 在后,先运算,再自增(自减)
    +(-):正负号
    注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换 其他类型转number: string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字) boolean转number:true转为1,false转为0

  • 算数运算符 + - * / % ...

  • 赋值运算符 = += -+....

  • 比较运算符 > < >= <= == ===(全等于) 比较方式

    1. 类型相同:直接比较

      字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。

    2. 类型不同:先进行类型转换,再比较

      ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false

  • 逻辑运算符 && || ! * 其他类型转boolean:
    1. number:0或NaN为假,其他为真
    2. string:除了空字符串(""),其他都是true
    3. null&undefined:都是false
    4. 对象:所有对象都为true

  • 三元运算符 ? : 表达式 var a = 3; var b = 4; var c = a > b ? 1:0;

    • 语法:表达式? 值1:值2;

      判断表达式的值,如果是true则取值1,如果是false则取值2;

3.5 流程控制语句

  • if...else...

  • switch: 在JS中,switch语句可以接受任意的原始数据类型

  • while

  • do...while

  • for

3.6 js 的特殊语法

  1. 语句以;结尾,如果一行只有一条语句则 ;可以省略 (不建议)
  2. 变量的定义使用var关键字,也可以不使用 用: 定义的变量是局部变量 不用:定义的变量是全局变量(不建议)

3.7方法

(1)与html相关的方法 bold():加粗 fontcolor(): 设置字符串的颜色 fontsize(): 设置字体的大小 link(): 将字符串显示成超链接 str4.link("hello.html") sub() sup(): 下标和上标

(2)与java相似的方法

  • concat(): 连接字符串 //concat方法 var str1 = "abc"; var str2 = "dfg"; document.write(str1.concat(str2));

  • charAt():返回指定指定位置的字符串 var str3 = "abcdefg"; document.write(str3.charAt(20)); //字符位置不存在,返回空字符串

  • indexOf(): 返回字符串位置 var str4 = "poiuyt"; document.write(str4.indexOf("w")); //字符不存在,返回1

  • split():切分字符串,成数组 ** var str5 = "abcd"; var arr1 = str5.split(""); document.write("length: "+arr1.length);

  • replace() : 替换字符串

    传递两个参数: 第一个参数是原始字符 第二个是要替换成的字符

     var str6 = "abcd";
    	document.write(str6);
    	document.write("<br/>");
    	document.write(str6.replace("a","Q"));
    
  • substr()和substring()

    //document.write(str7.substr(5,5));  //fghui  从第五位开始,向后截取五个字符
    从第几位开始,向后截取几位
    
    document.write(str7.substring(3,5)); //de  从第几位开始到第几位结束  [3,5)
    从第几位开始,到第几位结束,但是不包含最后哪一位
    

4 基本对象

4.1Function:函数(方法)对象

1.创建:

  • var fun = new Function(形式参数列表,方法体); //忘掉吧

  • function 方法名称(形式参数列表){ 方法体 }

  • 匿名方式 var 方法名 = function(形式参数列表){ 方法体 }

2.属性:length:代表形参的个数

3.特点:

  • 方法定义是,形参的类型不用写,返回值类型也不写。
  • 方法是一个对象,如果定义名称相同的方法,会覆盖
  • 在JS中,方法的调用只与方法的名称有关,和参数列表无关
  • 在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
  1. 调用:方法名称(实际参数列表);

4.2 Array:数组对象

  1. 创建:
  • var arr = new Array(元素列表);
  • var arr = new Array(默认长度);
  • var arr = [元素列表];
  1. 方法 join(参数):将数组中的元素按照指定的分隔符拼接为字符串 push() 向数组的末尾添加一个或更多元素,并返回新的长度。
  2. 属性 length:数组的长度
  3. 特点: JS中,数组元素的类型可变的。 JS中,数组长度可变的。

4.3 Date:日期对象

  1. 创建: var date = new Date();
  2. 方法: toLocaleString():返回当前date对象对应的时间本地字符串格式 getTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
** 在java里面获取当前时间 
		Date date = new Date();
		//格式化 
		//toLocaleString()   //2015年4月17日 11:17:12
	
	** js里面获取当前时间
		var date = new Date();
		//获取当前时间
		var date = new Date();
		document.write(date);  // Fri Apr 17 10:47:46 UTC+0800 2015 

		//转换成习惯的格式
		document.write("<hr/>");
		document.write(date.toLocaleString());
	
	** 获取当前的年方法
		getFullYear():得到当前的年
			**** document.write("year: "+date.getFullYear());
	
	** 获取当前的月方法
		getMonth():获取当前的月
			*** 返回的是 0-11月,如果想要得到准确的值,加1
			**** var date1 = date.getMonth()+1;
			document.write("month: "+date1);
	
	** 获取当前的星期
		getDay():星期,返回的是 (0 ~ 6)
		** 外国朋友,把星期日作为一周的第一天,星期日返回的是 0
		   而星期一到星期六 返回的是 1-6
		** document.write("week: "+date.getDay());

	** 获取当前的日
		getDate():得到当前的天 1-31
		** document.write("day: "+date.getDate());
	
	** 获取当前的小时
		getHours():获取小时
		** document.write("hour: "+date.getHours());
	
	** 获取当前的分钟
		getMinutes():分钟
		** document.write("minute: "+date.getMinutes());

	** 获取当前的秒
		getSeconds(): 秒
		** document.write("second: "+date.getSeconds());
	
	** 获取毫秒数
		getTime()
		返回的是1970 1 1 至今的毫秒数

		** 应用场景:
			*** 使用毫秒数处理缓存的效果(不有缓存)
				http://www.baidu.com?毫秒数

4.4 Math:数学对象

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

  2. 方法: random():返回 0 ~ 1 之间的随机数。 含0不含1 ceil(x):对数进行上舍入。 floor(x):对数进行下舍入。 round(x):把数四舍五入为最接近的整数。

4.5 js的全局函数

  1. 特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。 方法名();

  2. 方法: encodeURI():url编码 decodeURI():url解码 encodeURIComponent():url编码,编码的字符更多 decodeURIComponent():url解码

parseInt():将字符串转为数字

  • 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
var str3 = "123";
document.write(parseInt(str3)+1);
  • isNaN():判断一个值是否是NaN

    NaN六亲不认,连自己都不认。NaN参与的==比较全部问false eval():讲 JavaScript 字符串,并把它作为脚本代码来执行。

var str2 = "aaaa";
alert(isNaN(str2));
*** 如果是数字,返回false
*** 如果不是数字,返回true

4.6 JS中函数名后面的括号加与不加的区别和作用

  • 函数名后边加括号表示立即执行(调用)该函数, 不加括号只将函数名传递给事件,相当于将函数指针(也就是这个函数的入口地址)传给元素事件

4.7 js 的函数的重载

1.什么是重载?方法名相同,参数不同

2.js的重载是否存在? 不存在 (1)调用最后一个方法 (2)把传递的参数保存到 arguments数组里面

3.js里面是否存在重载?(面试题目) (1)js里面不存在重载。 (2)但是可以通过其他方式模拟重载的效果 (通过aruguments数组来实现)

5.js的bom对象

1.概念

Browser Object Model 浏览器对象模型

​ 将浏览器的各个组成部分封装成对象。

2.组成

  • Window:窗口对象

  • Navigator:浏览器对象

  • Screen:显示器屏幕对象

  • History:历史记录对象

  • Location:地址栏对象

3.Window:窗口对象

1. 概念:Browser Object Model 浏览器对象模型
	* 将浏览器的各个组成部分封装成对象。

2. 组成:
	* Window:窗口对象
	* Navigator:浏览器对象
	* Screen:显示器屏幕对象
	* History:历史记录对象
	* Location:地址栏对象

3. Window:窗口对象
    1. 创建
    2. 方法
         1. 与弹出框有关的方法:
            alert()	显示带有一段消息和一个确认按钮的警告框。
            confirm()	显示带有一段消息以及确认按钮和取消按钮的对话框。
                * 如果用户点击确定按钮,则方法返回true
                * 如果用户点击取消按钮,则方法返回false
            prompt()	显示可提示用户输入的对话框。
                * 返回值:获取用户输入的值
			 window.prompt("please input : ","0");
			 window.prompt("在显示的内容","输入框里面的默认值");
         2. 与打开关闭有关的方法:
            close()	关闭浏览器窗口。
                * 谁调用我 ,我关谁
            open()	打开一个新的浏览器窗口
                * 返回新的Window对象
             open("打开的新窗口的地址url","","窗口特征,比如窗口宽度和高度") 
			 创建一个按钮,点击这个按钮,打开一个新的窗口
			 window.open("hello.html","","width=200,height=100");
         3. 与定时器有关的方式
            setTimeout()	表示在毫秒数之后执行,但是只会执行一次.
                * 参数:
                    1. js代码或者方法对象
                    2. 毫秒值
                * 返回值:唯一标识,用于取消定时器
            
            clearTimeout()	取消由 setTimeout() 方法设置的 timeout。
			var id2 = setTimeout("alert('abc');",4000);
			clearTimeout(id2);
            
            setInterval()	按照指定的周期(以毫秒计)来调用函数或计算表达式。
            window.setInterval("alert('123');",3000); // 表示每三秒,执行一次alert方法
            clearInterval()	取消由 setInterval() 设置的 timeout。

    3. 属性:
        1. 获取其他BOM对象:
            history
            location
            Navigator
            Screen:
        2. 获取DOM对象
            document
    4. 特点
        * Window对象不需要创建可以直接使用 window使用。 window.方法名();
        * window引用可以省略。  方法名();

4. Location:地址栏对象

	href属性
	获取到请求的url地址
		 document.write(location.href);

    设置url地址
		 页面上安置一个按钮,按钮上绑定一个事件,当我点击这个按钮,页面可以跳转到另外一个页面
		 location.href = "hello.html";

	<input type="button" value="tiaozhuan" onclick="href1();"/>
		 鼠标点击事件  onclick="js的方法;"

5. History:历史记录对象

    1. 创建(获取):
        1. window.history
        2. history

    2. 方法:
        * back()	加载 history 列表中的前一个 URL。
        * forward()	加载 history 列表中的下一个 URL。
        * go(参数)	加载 history 列表中的某个具体页面。
            * 参数:
                * 正数:前进几个历史记录
                * 负数:后退几个历史记录
    3. 属性:
        * length	返回当前窗口历史列表中的 URL 数量。
```

6.js的dom对象

1.概念

    *  Document Object Model 文档对象模型
        * 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
    文档:
        超文本文档(超文本标记文档) html 、xml
    对象:
        提供了属性和方法
     模型:使用属性和方法操作超文本标记型文档

    可以使用js里面的dom里面提供的对象,使用这些对象的属性和方法,对标记型文档进行操作

     想要对标记型文档进行操作,首先需要 对标记型文档里面的所有内容封装成对象
         需要把html里面的标签、属性、文本内容都封装成对象

2.dom解析html过程

  • 要想对标记型文档进行操作,解析标记型文档 画图分析,如何使用dom解析html

  • 解析过程 根据html的层级结构,在内存中分配一个树形结构,需要把html中的每部分封装成对象
    document对象:整个文档 element对象:标签对象 Attribute:属性对象 Text:文本对象 Comment:注释对象

    Node节点对象:这个对象是这些对象的父对象
    如果在对象里面找不到想要的方法,这个时候到Node对象里面去找

  • 解析原理图

3.核心dom模型

* Document:文档对象
	1. 创建(获取):在html dom模型中可以使用window对象来获取
		1. window.document
		2. document
	2. 方法:
    	    1. 获取Element对象:
    		1. getElementById()	: 根据id属性值获取元素对象。id属性值一般唯一
    			通过id得到元素(标签)
                 //使用getElementById得到input标签
                var input1 = document.getElementById("nameid");  //传递的参数是标签里面的id的值
                //得到input里面的value值
                alert(input1.name);   //标签对象.属性名称
                //向input里面设置一个值value
                input1.value = "bbbbb";
    		
    		2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组			
                          通过标签名称得到元素
                         //演示getElementsByTagName
                        var inputs1 = document.getElementsByTagName("input");  //传递的参数,是标签名称
                        //alert(inputs1.length);
                        //遍历数组,得到每个input标签
                        for(var m=0;m<inputs1.length;m++) {
                            //得到每个input标签
                            var input1 = inputs1[m];
                            //得到value值
                            alert(input1.value);
                }
    		
    		3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
    		4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
                  通过标签的name的属性值得到标签
                 返回的是一个集合(数组)
                 //使用getElementsByName得到input标签
                var inputs = document.getElementsByName("name1");  //传递的参数是 标签里面的name的值
                //alert(inputs.length);
                //遍历数组
                for(var i=0;i<inputs.length;i++) {   //通过遍历数组,得到每个标签里面的具体的值
                    var input1 = inputs[i];  //每次循环得到input对象,赋值到input1里面
                    alert(input1.value);    //得到每个input标签里面的value值
                }
    	
        注意地方
        **** 只有一个标签,这个标签只能使用name获取到,这个使用,使用getElementsByName返回的是一个数组,
        但是现在只有一个元素,这个时候不需要遍历,而是可以直接通过数组的下标获取到值
        //通过name得到input标签
        var inputs2 = document.getElementsByName("name11")[0];
        alert(inputs2.value);
    
        var inputss = document.getElementsByTagName("input")[0];
        alert(inputss.value);
    	
    	2. 创建其他DOM对象:
    		createAttribute(name)
        	createComment()
        	createElement()
        	createTextNode()
    3. 属性
    * Element:元素对象
    1. 获取/创建:通过document来获取和创建
    2. 方法:
    	1. removeAttribute():删除属性
    	2. setAttribute():设置属性
    * Node:节点对象,其他5个的父对象
    * 特点:所有dom对象都可以被认为是一个节点
    * 方法:
    	* CRUD dom树:
    		* appendChild():向节点的子节点列表的结尾添加新的子节点。
    		* removeChild()	:删除(并返回)当前节点的指定子节点。
    		* replaceChild():用新节点替换一个子节点。
    * 属性:
    	* parentNode 返回节点的父节点。

4.innerHTML属性

* 这个属性不是dom的组成部分,但是大多数浏览器都支持的属性

  innerHTML在JS是双向知功能:获取对象的内容 或 向对象插入内容;
如:<div id="aa">这是内容</div> ,我们道可以通过 document.getElementById('aa').innerHTML 来获取id为aa的对象的内嵌内容;
  也可以对某对象插专入内容,如 document.getElementById('abc').innerHTML='这是被插入的内容'; 这样就能向id为abc的对象插入内容。

5.事件监听

1.概念

某些组件被执行了某些操作后,触发某些代码的执行。	
  * 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
  * 事件源:组件。如: 按钮 文本输入框...
  * 监听器:代码。
  * 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。

2.常见的事件

* 常见的事件:
	1. 点击事件:
		1. onclick:单击事件
		2. ondblclick:双击事件
	2. 焦点事件
		1. onblur:失去焦点
		2. onfocus:元素获得焦点。

	3. 加载事件:
		1. onload:一张页面或一幅图像完成加载。

	4. 鼠标事件:
		1. onmousedown	鼠标按钮被按下。
		2. onmouseup	鼠标按键被松开。
		3. onmousemove	鼠标被移动。
		4. onmouseover	鼠标移到某元素之上。
		5. onmouseout	鼠标从某元素移开。
	5. 键盘事件:
		1. onkeydown	某个键盘按键被按下。	
		2. onkeyup		某个键盘按键被松开。
		3. onkeypress	某个键盘按键被按下并松开。

	6. 选择和改变
		1. onchange	域的内容被改变。
		2. onselect	文本被选中。

	7. 表单事件:
		1. onsubmit	确认按钮被点击。
		2. onreset	重置按钮被点击。