JavaScript 概述
介绍
JavaScript是一门脚本语言,不须要编译就能够间接被浏览器解析执行。它是运行在浏览器中的,每一个浏览器都有本人的JavaScript解析引擎。
JavaScript能够用来加强用户和html页面的交互过程,能够来管制html元素。让页面有一些动静的成果,以此来加强用户的体验。
特点
- 交互性(它能够做的就是信息的动静交互)
- 安全性(不容许间接拜访本地硬盘)
- 跨平台性(只有是能够解释 JS 的浏览器都能够执行,和平台无关)
发展史
- 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为 C– ,起初更名为ScriptEase
- 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。起初,请来SUN公司的专家,批改LiveScript,命名为JavaScript
- 1996年,微软剽窃JavaScript开发出JScript语言
- 1997年,ECMA(欧洲计算机制造商协会),制订出客户端脚本语言的规范:ECMAScript,就是对立了所有客户端脚本语言的编码方式。
JavaScript = ECMAScript + JavaScript本人特有的货色(BOM+DOM)
JavaScript根底语法
与html联合形式
JavaScript与Html联合的办法总有两种,即——外部JS和内部JS。
外部JS
概述
间接在html页面中书写JavaScript代码,所书写的JavaScript代码应用Script
标签包围起来。
格局
<script type="text/javascript"> JS代码</script>
演示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Demo</title> <!--在外部定义JS--> <script type="text/javascript"> alert("Hello World"); </script></head><body></body></html>
内部JS
概述
应用script
标签,通过src属性引入内部的js文件。
格局
<script type="text/javascript" src="JS文件地址"></script>
演示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Demo</title> <!--援用内部JS--> <script type="text/javascript" src="../JavaScript/one.js"></script></head><body></body></html>
script
标签能够定义在html页面的任何中央,然而定义的地位会影响其执行程序。script
标签也能够在一个html页面,同时定义多个。
JavaScript正文
概述
JavaScript的正文格局和Java的完全一致,无论是单行正文,还是多行正文。
单行正文
格局
//正文内容
演示
//这是一个单行正文
多行正文
格局
/* 正文内容 */
演示
/* 这是一个多行正文 */
JavaScript数据类型
概述
JavaScript也同Java一样,数据类型分为两类,即——原始数据类型、援用数据类型。
原始数据类型
number类型
- 整数
- 小数
- NaN(not a number,一个不是数字的数字类型)
string类型
单引号与双引号定义的都是字符串类型,Javascript没有字符类型的概念。
boolean类型
- true
- false
null类型
一个对象为空的占位符。
undefined类型
未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined。
援用数据类型
对象。Javascript中的援用数据类型也都是对象。
JavaScript变量
概述
JavaScript与Java中的变量很相识,但又并不完全相同。根本原因为Javascript为弱类型语言,而Java为强类型语言。什么是弱类型语言,什么是强类型语言呢?上面我来简略的阐明一下:
- 弱类型语言:在开拓变量存储空间时,不定义空间未来的存储数据类型,而是能够寄存任意类型的数据。
- 强类型语言:在开拓变量存储空间时,定义了空间未来存储的数据的数据类型,只能存储固定类型的数据。
正是因为语言类型的不同,导致了两种语言的变量也有不同的用意,下文我次要表述其不同之处。
格局
//定义变量(默认赋值为undefined)var 变量名;//定义并初始化值var 变量名 = 初始值;
演示
//定义变量(默认赋值为undefined)var num01;var num02;var num03;//接管number类型值num01 = 1;num02 = 3.14;num03 = NaN;//定义并初始化string类型值var str01 = '2';var str02 = "two";var str03 = '我是一个二';//定义并初始化boolean类型值var flag01 = true;var flag02 = false;//定义并初始化null类型值var obj = null;//定义并初始化undefined类型值var und01 = undefined;var und02;//默认赋值为undefined
新个性
ES2015(ES6) 新减少了两个重要的 JavaScript 关键字: let 和 const。
let 申明的变量只在 let 命令所在的代码块内无效。
const 申明一个只读的常量,一旦申明,常量的值就不能扭转。
- 应用var申明的变量,其作用域为该语句所在的函数内,且存在变量晋升景象;
- 应用let申明的变量,其作用域为该语句所在的代码块内,不存在变量晋升;
- 应用const申明的是常量,在前面呈现的代码中不能再批改该常量的值。
总结:
通常,应该始终应用const申明变量,如果您意识到须要更改变量的值,请返回并将其更改为let。如果我的项目不反对ES6,再应用var来申明变量。
typeof函数
概述
因为Javascript的变量能够存储任意类型的数据,这样就导致咱们无奈判断一个变量中存储的数据是number类型、string类型的,还是boolean类型的。于是这个时候,咱们就须要用到typeof
运算符,来帮忙咱们辨别变量中存储的不同数据的类型。
typeof的作用就是传入一个变量,同时返回这个变量所存储数据的数据类型。
格局
typeof(变量名)
演示
//别离判断num01、str01、flag01、obj、und01的数据类型let type01 = typeof(num01);let type02 = typeof(str01);let type03 = typeof(flag01);let type04 = typeof(obj);let type05 = typeof(und01);//打印到html页面上document.write(type01 + "<br>");document.write(type02 + "<br>");document.write(type03 + "<br>");document.write(type04 + "<br>");document.write(type05 + "<br><br>");/* 打印后果: number string boolean object undefined*/
JavaScript运算符
一元运算符
概述
只有一个运算数参加的运算符。
次要成员
++`、`--`、`+(正号)`、`-(负号)
注意事项
对于自增与自减:
a++
,先运算,再自增。++a
,先自增,再运算。
在JS中,如果运算数不是运算符所要求的类型,那么js引擎会主动的将运算数进行类型转换。如:
- String类型转number类型:首先依照字面转化为相应的数字,如果字面值不是数字,则转为NaN(不是数字的数字)。
- boolean类型转number类型:true转为1,false转为0。
算数运算符
概述
用于进行一些数学运算的符号。
次要成员
+`、`-`、`*`、`/`、`%
赋值运算符
概述
将一个数据赋予另一数据的符号。
次要成员
=`、`+=`、`-=
比拟运算符
概述
用于数据大小比拟的运算符。
次要成员
>`、`<`、`>=`、`<=`、`==`、`===(全等于)
注意事项
- 若类型雷同,则间接进行比拟。若数据类型不同,先进行类型转换,再比拟。
===(全等于)
:在比拟之前,先判断类型,如果类型不一样,则间接返回false。- 字符串类型之间的数据进行比拟,依照字典程序比拟。按位逐个比拟,直到得出大小为止。
逻辑运算符
概述
用于进行逻辑判断的运算符。
次要成员
&&`、`||`、`!
注意事项
在进行逻辑运算时,通常会遇到其余数据类型转为boolean数据。
- number转boolean时:0或NaN为假,其余为真
- string转boolean时:除了空字符串为假,其余都是true
- null和undefined转boolean时:都为false
- 对象转boolean时:都为true
三元运算符
格局
//表达式为真,则返回后果1。为假,则返回后果2表达式 ? 后果1 : 后果2
演示
let a = 1;let b = 2;let c = a > b ? "正确" : "谬误";console.log(c);//谬误
管制语句
次要成员
if...else...
while
do...while
for
switch...case
注意事项
switch语句的差别:
- 在java中,switch语句能够承受的数据类型只有:
byte
、short
、int
、char
、枚举
、String
。 - 在Javascript中,switch语句能够承受任意的原始数据类型
JS非凡语法
- 语句以
;
结尾,如果一行只有一条语句则能够省略,但不倡议 变量的定义应用
let
关键字,但也能够不应用
- 应用
let
关键字定义变量,定义的变量为局部变量。 - 不是用
let
关键字定义变量,定义的变量为全局变量,但不倡议
- 应用
JavaScript对象
JavaScript中的函数相当于Java中的办法,大抵能够分为以下几种:
- function-办法对象
- Array-数组对象
- Date-日期对象
- Math-数学对象
- RegExp-正则对象
- Global-全局对象
- Number-数字包装对象
- String-字符串对象
- Boolean-布尔对象
- Error-谬误对象
上面我会一一解说。
function-函数对象
创立
格局
//创立函数格局一function 函数名(形参列表) { 函数体}//创立函数格局二let 函数名 = function(形参列表) { 函数体}//创立函数格局三(不倡议应用)let 函数名 = new function(形参列表,函数体);
演示
//创立函数格局一function fun01(a, b) { console.log("fun01的后果为:" + (a + b));}//创立函数格局二let fun02 = function(a,b){ console.log("fun02的后果为:" + (a + b));}
调用
格局
函数名(实参列表);
演示
//调用fun01fun01(10,20);//fun01的后果为:30//调用fun02fun02(30,40);//fun02的后果为:70
属性
length
:函数形参的个数。
let d = fun01.length;console.log("函数fun01的形参个数为:" + d);//函数fun01的形参个数为:2
特点
- 创立办法时,形参类型不须要写,返回值类型也不须要写。
- 办法是一个对象,如果定义名称雷同的办法,会后者后笼罩前者。
- 在JS中,办法的调用只与办法的名称无关,和参数列表无关。即只有办法名正确,你参数传少、传多,都是能够失常调用办法的。
- 在办法申明中有一个暗藏的内置对象(数组)——arguments,封装所有的理论参数。所以哪怕办法形参只有两个,然而你也能够传入三个,因为实参都是先被
arguments
数组所接管了。
Array-数组对象
创立
格局
//创立数组格局一let 数组名 = new Array();//创立数组格局二let 数组名 = new Array(默认长度);//创立数组格局三let 数组名 = new Array(元素列表);//创立数组格局四let 数组名 = [元素列表];
演示
//创立数组格局一let arr01 = new Array();//创立数组格局二let arr02 = new Array(3);//创立数组格局三let arr03 = new Array(1,2,3);//创立数组格局四let arr04 = [4,5,6,7,8];
遍历
格局
数组名[索引];
演示
//遍历数组for (let i = 0; i < arr04.length; i++) { console.log(arr04[i]);}
属性
length
:数组的长度
let num = arr03.length;//获取数组arr03的长度
办法
join()
将数组中的元素依照指定的分隔符拼接为字符串
//将数组中的元素依照指定的分隔符拼接为字符串let arr05 = arr04.join("-");console.log(arr05);////4-5-6-7-8
push()
向数组的开端增加一个或更多元素,并返回新的长度。
//向数组的开端增加一个或更多元素,并返回新的长度let length = arr04.push(9,10,11);console.log(length);//8
特点
- JS中,数组存储元素的类型不是对立的,是可变的。而Java数组只能存储繁多类型的元素。
- JS中,数组长度也不是固定的,数组长度可变。而Java数组长度创立之初就固定,不可扭转。
Date-日期对象
创立
格局
let 日期对象名 = new Date();
演示
let newTime = new Date();document.write(newTime);//Tue Dec 22 2020 22:45:04 GMT+0800 (GMT+08:00)
办法
toLocaleString()
:返回以后date对象对应的工夫本地字符串格局let newTime = new Date();let localeTime = newTime.toLocaleDateString();document.write(localeTime);//2020/12/22
getTime()
:获取毫秒值。返回以后如期对象形容的工夫到1970年1月1日零点的毫秒值差let newTime = new Date();let MSTime = newTime.getTime();document.write(MSTime);//1608648497413
Math-数学对象
创立
Javascript中的Math也不须要创立了,间接通过Math.办法名()
的形式来应用数学对象。
属性
PI
:圆周率
let a = Math.PI;document.write(a);//3.141592653589793
办法
random()
:返回一个[0,)
之间的伪随机数。ceil()
:对传入的参数,向上取整。floor()
:对传入的参数,向下取整。round()
:对传入的参数,四舍五入。
RegExp-正则对象
创立
格局
//创立正则格局一let 正则对象名 = new RegExp("正则表达式");//创立正则格局二let 正则对象名 = /正则表达式/;
演示
//创立正则格局一let regExp01 = new RegExp("^0\\\\d{2}.[1-9].*6$");document.write(regExp01);///^0\\d{2}.[1-9].*6$///创立正则格局二let regExp02 = /^0\\d{2}.[1-9].*6$/;document.write(regExp02);///^0\\d{2}.[1-9].*6$//^0\\d{2}.[1-9].*6$/
规定
规定太多了,说也说不清,来这里学习吧~
点我——>正则学习网站
办法
test()
:传入字符串,验证是否合乎正则定义的标准
let regExp01 = new RegExp("^0\\\\d{2}.[1-9].*6$");let result = regExp01.test("3093");document.write(result);//false
Global-全局对象
创立
全局对象也是不须要创立的,Global对象中的办法也不须要对象,就能够间接被调用。如:alert()
办法
encodeURI()
:将字符串作为 URI 进行编码。encodeURIComponent()
:将字符串作为 URI 组件进行编码。编码的字符更多。decodeURI()
:对 encodeURI() 函数编码过的 URI 进行解码。decodeURIComponent()
:可对 encodeURIComponent() 函数编码的 URI 进行解码。eval()
:解析字符串模式的JavaScript代码,并执行它。isNaN()
:因为用==
与NaN进行比拟,哪怕是NaN本身,也只能失去false。应用此办法,能够检查数据自身其是否为NaN。parseInt()
:逐个判断每一个字符是否是数字,直到不是数字为止,将前边数字局部转为number。
Number-数字包装对象
概述
Number 对象是原始数值的包装对象。
创立
格局
let 变量名 = new Number(value);
演示
let num = new Number(40);
办法
toString()
:数字转为字符串let num = new Number(40);document.write(typeof(num) + "<br/>");//objectlet string = num.toString();document.write(typeof(string));//string
valueof()
:拆箱let num = new Number(40);document.write(typeof(num) + "<br/>");//objectlet number = num.valueOf();document.write(typeof(number));//number
String-字符串对象
概述
String 对象用于解决文本(字符串),和Java的String类简直统一。
创立
格局
//创立string对象格局一let 变量名 = new String("字符串内容");//创立string对象格局二let 变量名 = new String('字符串内容');//创立string对象格局三let 变量名 = "字符串内容";//创立string对象格局四let 变量名 = '字符串内容';
演示
//创立string对象格局一let s01 = new String("字符串一");document.write(s01 + "<br/>");//创立string对象格局二let s02 = new String('字符串二');document.write(s02 + "<br/>");//创立string对象格局三let s03 = "字符串三";document.write(s03 + "<br/>");//创立string对象格局四let s04 = '字符串四';document.write(s04 + "<br/>");
办法
很多,也是根本和Java的差不多。您啊,罗唆间接去【菜鸟教程】学得了。JavaScript String 对象 | 菜鸟教程
Boolean-布尔对象
概述
Boolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 (true 或者false).
创立
格局
//创立Boolean对象格局一let boolean01 = new Boolean();//创立Boolean对象格局二let boolean02 = new Boolean(true);//创立Boolean对象格局三let boolean03 = false;
演示
//创立Boolean对象格局一let boolean01 = new Boolean();document.write(boolean01 + "<br/>");//false//创立Boolean对象格局二let boolean02 = new Boolean(true);document.write(boolean02 + "<br/>");//true//创立Boolean对象格局三let boolean03 = false;document.write(boolean03 + "<br/>");//false
Error-谬误对象
概述
error是指程序中的非正常运行状态,在其余编程语言中称为“异样”或“谬误”,解释器会为每个谬误情景创立并抛出一个Error对象,其中蕴含谬误的形容信息;
ECMAScript定义了六种类型的谬误,除此之外,还能够应用Error构造方法创立自定义的Error对象,并应用throw语句抛出该对象。
创立
格局
//创立Error对象格局一let 变量名 = new Error();//创立Error对象格局二let 变量名 = new Error(message);
演示
//创立Error对象格局一let error01 = new Error();//创立Error对象格局二let error02 = new Error("空指针异样");
分类
ReferenceError
:援用谬误,要用的货色没找到;TypeError
:类型谬误,谬误的调用了对象的办法;RangeError
:范畴谬误,专指参数超范围;SyntaxError
:语法写错了;EvalError
:eval()办法谬误的应用;URIError
:URI地址谬误;
属性
name
: 设置或返回一个谬误名message
: 设置或返回一个错误信息(字符串)
let error02 = new Error("空指针异样");let errorName = error02.name = "我的Error对象";document.write(errorName + "<br/>");//我的Error对象let errorMessage01 = error02.message;document.write(errorMessage01 + "<br/>");//空指针异样error02.message = "德玛西亚的异样";document.write(error02.message + "<br/>");//德玛西亚的异样
自定义Object对象(扩大)
这个自定义的Object对象,和咱们Java中的类很相识,都是由属性和办法(函数)组成的。上面我会来具体介绍一下这个自定Object对象的创立和应用。
创立
格局
//创立自定Object对象格局一let 变量名 = new Object();//创立自定义Object对象格局二let 变量名 = { 属性名: 属性值, 函数名: 函数体}
演示
//创立自定Object对象格局一let obj01 = new Object();//创立自定义Object对象格局二let obj02 = { name: "Jason", age: 21, reading: function(){ document.write("我在读书!"); }};
增加、批改值
格局
Object对象.属性名 = 属性值;Object对象.函数名 = 函数体;
演示
obj01.name = "Bernardo Li";obj01.reading = function () { document.write("我也在读书");}
批改值与增加值一样,批改值无非是在对已存在的值进行赋值。
应用值
格局
Object对象.属性名;Object对象.函数名();
演示
document.write(obj02.name + "<br/>");//Jasonobj02.reading();//我在读书!
BOM对象
概述
BOM(Browser Object Model) 是指浏览器对象模型,是用于形容这种对象与对象之间档次关系的模型,浏览器对象模型提供了独立于内容的、能够与浏览器窗口进行互动的对象构造。
组成
BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其余对象都是该对象的子对象。其子对象如下:
- document——文档对象
- Navigator——浏览器对象
- Screen——显示器对象
- History——历史记录对象
- Location——地址栏对象
Window-窗口对象
创立
首先window对象是不须要手动去创立的。咱们能够通过window.办法名()
的形式调用它的办法,甚至不须要window.
,就能够间接调用其办法。
//window.办法名()window.alert("我是一个弹窗");//省略window,间接调用办法alert("我也是一个弹窗");
属性
咱们能够通过BOM对象中的属性来获取其子对象。如下:
Window.Document
:获取Document文档对象Window.
可省略)。Window.History
:获取History历史记录对象(Window.
可省略)。Window.Navigator
:获取Navigator浏览器对象(Window.
可省略)。Window.Screen
:获取Screen显示器对象(Window.
可省略)。Window.Location
:获取Location地址栏对象(Window.
可省略)。
办法
DOM对象
前言
咱们曾经解说过BOM对象了,晓得DOM对象只是BOM顶层对象Window的几个子对象之一。既然DOM对象是BOM对象的子对象,为什么不蕴含在BOM对象中解说,而是要独自提取进去进行阐明呢?起因就是:DOM对象与History对象、Location对象等虽都为BOM的子对象,但DOM对象在咱们日常开发中的应用频率远高于同级的BOM其余子对象。所以咱们要对其具体解说一下。
概述
通过 DOM,能够拜访所有的 HTML 元素,连同它们所蕴含的文本和属性。能够对其中的内容进行批改和删除,同时也能够创立新的元素。
对于Dom对象的了解,能够总结为四点:
- Document 它治理了所有的 HTML 文档内容。
- document 它是一种树结构的文档,有层级关系。
- 它让咱们把所有的标签都对象化
- 咱们能够通过 document 拜访所有的标签对象。
分类
document对象蕴含了以下几种对象:
- Element-元素对象
- Attribute-属性对象
- Text-文本对象
- Comment-正文对象
- Node-节点对象
创立
形式一
通过windown对象来获取,格局为:window.document
形式二
window.`能够省略,间接调用document对象,格局为:`document
获取其余对象
document.createElement(tagName)
:给定的标签名,创立一个标签对象。tagName为要创立的标签名。document.createAttribute(attributeName)
:创立一个指定名称的属性,并返回Attr 对象属性。document.createComment(text)
:创立正文节点。text为正文文本。document.createTextNode(text)
:创立文本节点。text为文本节点的文本。
Element-元素对象
获取
document.getElementById(elementId)
:通过标签的 id 属性查找标签 dom 对象,elementId 是标签的 id 属性值。document.getElementsByName(elementName)
:通过标签的 name 属性查找标签 dom 对象,elementName 标签的 name 属性值、document.getElementsByTagName(tagName)
:通过标签名查找标签 dom 对象,tagname 为标签名。
三个查询方法的优先级问题:
- 如果有 id 属性,优先应用 getElementById 办法来进行查问
- 如果没有 id 属性,则优先应用 getElementsByName 办法来进行查问
- 如果 id 属性和 name 属性都没有最初再按标签名查 getElementsByTagName
代码演示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Demo01</title> <style type="text/css"> #title { font-weight: bold; color: cornflowerblue; } </style></head><body><!--一个表单--><form id="table" action="/"> <span id="title">请抉择你的喜好</span><br/> <span>Game:</span><input type="checkbox" name="hobbies" value="Game"> <span>Reading:</span><input type="checkbox" name="hobbies" value="Reading"> <span>Boxing:</span><input type="checkbox" name="hobbies" value="Boxing"><br/> <input type="submit" value="提交"></form></body><script type="text/javascript"> //通过Id获取dom对象 var tableElement = document.getElementById("table"); document.write(tableElement + "<br/>");//[object HTMLFormElement] //通过name获取dom对象们 var hobbiesElement = document.getElementsByName("hobbies"); document.write(hobbiesElement + "<br/>");//[object NodeList] //通过tagName获取dom对象们 var spanElement = document.getElementsByTagName("span"); document.write(spanElement + "<br/>");//[object HTMLCollection]</script></html>
办法
setAttribute("属性名",属性值)
:设置调用者的指定属性名的属性值。removeAttribute("属性名")
:移除调用者的指定属性。
Node-节点对象
属性
parentNode
:获取以后节点的父节点。childNodes
:获取以后节点的所有子节点firstChild
:获取以后节点的第一个子节点lastChid
:获取以后节点的最初一个子节点previousSibling
:获取以后节点的上一个节点nextSibling
:获取以后节点的下一个节点className
:获取或设置标签的 class 属性值innerHTML
:获取/设置起始标签和完结标签中的内容innerText
:获取/设置起始标签和完结标签中的文本
办法
appendChild()
:向节点的子节点列表的结尾增加新的子节点。removeChild()
:删除(并返回)以后节点的指定子节点。replaceChild()
:用新节点替换一个子节点。
document对象下的其余对象在这里就不在过多的叙述了,有趣味的能够去菜鸟教程中学习。
事件
概述
某些组件被执行了某些操作后,触发某些代码的执行。
点击事件
onclick
:单击事件ondblclick
:双击事件
焦点事件
:失去焦点- 个别用于表单验证2. `onfocus`:元素取得焦点## 加载事件`onload`:一张页面或一副图像实现加载。## 鼠标事件1. `onmousedown`:鼠标按钮被按下。2. `onmouseup`:鼠标按钮被松开。3. `onmousemove`:鼠标被挪动。4. `onmouseover`:鼠标移到某元素之上。5. `onmouseout`:鼠标从某元素移开。## 键盘事件1. `onkeydown`:某个键盘按键被按下。2. `onkeyup`:某个键盘按键被松开。3. `onkeypress`:某个键盘按键被按下并松开。## 抉择和扭转1. `onchange`:域的内容被扭转。2. `onselect`:文本被选中。## 表单事件1. `onsubmit`:确认按钮被点击。