JavaScript学习笔记(持续更新中)~
第一章 JavaScript简介
1.1、JavaScript的起源
JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则。比如:用户名的长度,密码的长度,邮箱的格式等。但是,有的同学可能会有疑问,这些验证,后端不也可以进行验证吗?确实,后端程序的确可以进行这些验证,但你要清楚,在1995年那个年代,网速是非常慢的,向后端发送一个请求,浏览器很久才能得到响应,那这无疑是一种非常不好的用户体验。
为了解决前端验证的问题,当时的浏览器巨头NetScape(网景)公司就开发出一种脚本语言,起初命名为LiveScript,后来由于SUN公司的介入更名为了JavaScript。但是你要清楚,Java和JavaScript是没有什么关系的,只不过当时Java非常流行,为了蹭热度,才将LiveScript更名为JavaScript,它们的关系就像雷锋和雷峰塔的关系一样,没啥关系。
但是,浏览器开发商不止网景一家,还有一个大家都知道的公司,微软公司,它们的主打产品是IE(Internet Explorer)浏览器,当网景公司的Netscape Navigator浏览器推出JavaScript语言时,微软就急了啊,好家伙,人网景都推出了专门用于前端验证的语言,不仅大大减少了后端程序的压力,还提高了用户的体验。我微软这么大的公司不也得整一个,在1996年,微软公司在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript。
于是在市面上存在两个版本的JavaScript,一个网景公司的JavaScript和微软的JScript,虽然当时浏览器的巨头是网景,但是网景的浏览器是收费的,虽然微软的IE浏览器在全球的市场份额远远不及网景,但是微软的拳头产品是Windows操作系统,每一个操作系统都自带一个IE浏览器并且免费,那么,未来的发展大家可能也想到了,网景让微软给干倒闭了,1998年11月,网景被美国在线(AOL)收购。
老大哥就是老大哥,为了抢先获得规则制定权,网景最先将JavaScript作为草案提交给欧洲计算机制造商协会,也就是ECMA组织,希望能将JavaScript做成行业标准,最终在网景、SUN以及微软等公司的参与下,由一众程序员和相关组织人员组成的第39技术委员会也就是TC39发布了ECMA-262标准,这个标准定义了名为ECMAScript的全新脚本语言,为啥又来了个ECMAScript?
因为Java是SUN的商标,SUN授权了NetScape可以叫JavaScript,但是ECMA没有SUN的授权就不能叫JavaScript,哪怕NetScape成员特别希望ECMA把它叫做JavaScript,但是ECMA也有成员并不希望这个标准就叫JavaScript,总之经过几轮磋商和博弈,ECMAScript这个名字就定下来。
1.1.1JavaScript的组成
javascript分为三部分
DOM:文档对象模型
BOM:浏览器对象模型
ECMAScript:主要指的是语法,比如声明变量,函数,条件判断,循环等
1.2、JavaScript的使用
1.2.1、JavaScript书写位置
内嵌写法
<script>
console.log('hello word')
</script>
外部写法
<script src="idenx.js"></script>
1.2.2、JavaScript的注释
注释中的内容不会被解析器解析执行,但是会在源码中显示,我们一般会使用注释对程序中的内容进行解释。
JS中的注释和Java的的一致,分为两种:
单行注释:// 注释内容
多行注释:/* 注释内容 */
单行注释
//这是单行注释
多行注释
/**
*这是多行注释
/
1.2.2、JavaScript输出
控制台输出
<script>
console.log('hello word')
</script>
页面输出
<script>
document.write("Hello,World!");
</script>
弹窗输出
<script>
alert("Hello,World!");
</script>
1.2.3、JavaScript数据类型和变量
声明变量
声明变量用let声明常量用const是ES6新增的声明变量的关键词,之前声明变量的关键词是var。
数据类型
1、字符串型(string):单引号’'双引号""都可以使用。
2、数值型(number):整数、小数都可以。
3、布尔型(boolean):true,false。
4、undefined型(undefined):undefined表示声明了,但是未赋值的变量,或者访问不存在的属性或索引。
5、null型(null):表示空或者没有。
除了5种之外的类型都称为Object。
1.2.4、JavaScript的DOM操作
DOM:每个HTML标签都在dom中表示为一个节点(node),节点之间存在父子、兄弟关系,通过dom,可以使js编程,来修改网页结构,样式,内容。
属性 | 说明 |
---|---|
getElementById | 用于根据元素的id属性获取HTML文档中的元素。 |
getElementsByTagName | 这个方法返回一个节点的集合,这个集合可以当做一个数组来处理。 |
getElementsByClassName | 返回文档中所有指定类名的元素集合 。 |
getAttribute | 使用getElementById()或者使用getElementByTagName()方法取出来的节点元素的属性名称。取得属 性的名称之后,我们就可以用getAttribute()方法将它的属性值拿出来了。 |
setAttribute | 添加指定的属性。 |
textContent | 设置或者获取标签中的文本内容。 |
createElement | 在对象中创建一个新的对象。 |
appendChild | 在节点的子节点列表末添加新的子节点。 |
insertBefore | 在节点的子节点列表任意位置插入新的节点。 |
1.2.5、JavaScript的条件语句与循环语句
条件语句
if…else语句是一种最基本的控制语句
const score = 60
if (score >= 80) {
console.log("优秀")
} else if (score >= 60) {
console.log("及格")
} else {
console.log("不及格")
}
switch语句更适用于多条分支使用同一条语句的情况。
switch (语句) {
case 表达式1:
语句...
case 表达式2:
语句...
default:
语句...
}
循环语句
while循环
while(条件表达式){
语句...
}
do…while循环
do{
语句...
}while(条件表达式);
for循环
for(初始化表达式 ; 条件表达式 ; 更新表达式){
语句...
}
for…in循环
for(let liskey in arr){
console.log(liskey)
for…of循环
for (let value of arr){
console.log(value)
}
总结
for循环适用于已知循环次数的情况
while适用于未知循环次数 do while与while类似,但只执行一次在判断条件
for in适用于遍历对象的可枚举属性,更适合于遍历对象而不是数组
for of 用于遍历可迭代对象(数组、对象都可以)