1.JavaScript概述

1.1什么是JavaScript

JavaScript是一门面向对象的、弱数据类型、解释性、动态的脚本语言,简称js

1.2JavaScript可以干什么

JavaScript的主要作用有三个:

  • 数据校验(js就是为这个诞生的)
  • 网页特效(目前主要的使用场景)
  • 数据交互(主要指Ajax技术

1.3JavaScript 的一些特点

  1. JavaScript 是一个脚本编程语言。
  2. 脚本语言相对传统的编程语言而已,语法和规则相对没有那么严格。
  3. avaScript 是解释执行。即JavaScript 在执行的时候,不会编译成二进制代码。而是将
    JavaScript 代码调入引擎,然后解释执行。
  4. JavaScript 的主要的作用,可以对网页的元素动态编程。
  5. JavaScript是弱数据类型编程语言。
  6. JavaScript是面向对象编程语言。

2.基本数据

2.1计算机基本组成

  • 中央处理器(Center Processing Unit,CPU)
  • 内存
  • 存储设备
  • 输入设备
  • 输出设备
  • 通信设备

2.2HelloWorld

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>js,hello world</title>
  6. </head>
  7. <body>
  8. <script>
  9. alert('hello JavaScript, I am coming!!!');
  10. alert('点你一下咋地?');
  11. document.write("hello,I am write");
  12. </script>
  13. </body>
  14. </html>

2.3JS书写方式

2.3.1行内js

  1. <button onclick="alert('你点我干嘛?');alert('点你一下咋地?')">点一下试试</button>

2.3.2页面内嵌js

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>js,hello world</title>
  6. </head>
  7. <body>
  8. <script>
  9. alert('hello JavaScript, I am coming!!!');
  10. alert('点你一下咋地?');
  11. </script>
  12. </body>
  13. </html>

2.3.3外联js文件

  1. <script src="js/index.js"></script>

2.4对话框

2.4.1警告框

  1. alert('hello JavaScript, I am coming!!!');

2.4.2确认框

  1. // 确认框
  2. let isDelete = confirm("您确定要删除您的账号吗?");
  3. alert(isDelete)
  4. if (isDelete) {
  5. alert("数据删除了")
  6. }

2.4.3输入框

  1. // 注意:三种对话框函数都是window对象的方法,所以可以通过window.alert()这种方式来调用
  2. // 当然也可以不写,直接调用,因为js中window就是全局对象,默认访问就是window对象
  3. var age = window.prompt("请输入您的年龄:", "20"); // 默认20
  4. alert("您今年是" + age + "岁了");

2.5.关键字

2.6.注释

2.7.变量

const、let、var区别

1.const定义的变量不可以修改,而且必须初始化

  1. const b = 2;//正确
  2. // const b;//错误,必须初始化
  3. console.log('函数外const定义b:' + b);//有输出值
  4. // b = 5;
  5. // console.log('函数外修改const定义b:' + b);//无法输出

2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错

  1. var a = 1;
  2. // var a;//不会报错
  3. console.log('函数外var定义a:' + a);//可以输出a=1
  4. function change(){
  5. a = 4;
  6. console.log('函数内var定义a:' + a);//可以输出a=4
  7. }
  8. change();
  9. console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

3.let是块级作用域,函数内部使用let定义后,对函数外部无影响

  1. let c = 3;
  2. console.log('函数外let定义c:' + c);//输出c=3
  3. function change(){
  4. let c = 6;
  5. console.log('函数内let定义c:' + c);//输出c=6
  6. }
  7. change();
  8. console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3

变量命名规范

在JavaScript中,变量的名称命名是存在规范的,主要需要遵循如下几条规则:

  • 变量名只能有有效符号组成(大小写字母、数字、下划线_、JavaScript - 图1并不是有效符号,如python
  • 变量名不能以数字开头!!切记
  • 变量名不能使用关键字或者保留字
  • 变量名最好有意义,如年龄使用age、姓名使用name,不要使用a、b这种无意义的单词或者字母
  • 变量名应当尽量遵循小驼峰法名称,如userName、classRoom等,当然下划线法也行,如user_name。但是建议跟官方保存一致,使用小驼峰法,类的名称使用大驼峰法。

2.8.常量

2.9.数据类型

JavaScript提供了两大类数据类型:基本数据类型和引用数据类型(对象、指针)

  • 基本数据类型
    • 数值类型(Number)
      • int 整数
      • float 小数、浮点数
    • 布尔类型(Boolean)
      • 只有两个值 — true、false
    • 字符串(String)
      • 被单引号或者双引号引起来的符号,ES6中两个`符号引起来的也是字符串
    • 空(null)
      • 表示不存在
    • 未定义(undefined、空的特殊表现)
      • 表示引用未定义的变量
    • 不是数字(NaN - Not a Number)
      • 判断不是数字
  • 引用数据类型
    • 数值(Array)
    • Object(对象) 万物皆对象

3.常见运算符

3.8数据类型的转换

3.8.1 弱数据类型语言

JavaScript和python类型,都是若数据类型语言(定义变量的时候不用申明类型,只要使用关键字var即可,如var a = 10 ,由值的类型决定变量的类型),Java和C等语言是强数据类型语言,在定义变量的时候必须申明类型,如 int a = 10,此时a必须是int类型,不能存储小数等其他类型。

3.8.2 自动类型转换

JavaScrip是弱数据类型语言,类型由值的类型决定,所以类型可以任意转换。
注意:Java等强数据类型语言中,也存在自动类型转换,但是指的是低类型数据在参与高类型数据运算时,会自动向高类型数据转换,和python、JavaScript等弱数据类型语言有本质的区别的。

  1. var a = 10;
  2. console.log(typeof a) // number
  3. console.log(typeof(a)) // number
  4. // 可以理解为所数据类型,由值的类型决定了变量的类型
  5. a = 5.6;
  6. console.log(a); // 5.6
  7. a = "帅哥刘";
  8. console.log(a); // 刘帅哥

3.8.3 强制类型转换

有时候,我们 需要将字符串数字(就是字符串有数字组成),要进行运算,如果类型是字符串,在进行加法运算时,当成字符串拼接了,所以需要我们转换为字符串为数值类型。JavaScript提供了两个全局函数—parseInt、parseFloat,专门用来转换整数和小数

  1. var age = prompt("请输入您的年龄:", "20");
  2. alert(typeof age);
  3. alert(a + 1000);
  4. age = parseInt(age);
  5. alert(typeof age);
  6. alert(a + 1000);

注意:parseInt和parseFloat这两个全局函数,会尽可能的尝试着将字符串转换为数字,直到不成功为止,所以这两个函数也有去掉单位的作用,如width=”20px”,我们可以使用parseInt(width),就会到的20的数值。

4.流程控制语句

4.1顺序

4.2选择结构

4.3循环

4.3.5循环加强

4.3.5.1for in 循环

在JavaScript中,还提供了一种 for in的循环,用来迭代数组或者对象,需要注意的是,迭
代的变量如果是数组,则返回的是数组下标,而如果是对象的,返回的是对象的属性名称

  1. // arr是JavaScript中数组
  2. var arr = [1, 3, 454, 5, 6, 77]
  3. for (var i in arr) {
  4. // i 是数组的下标
  5. console.info(arr[i])
  6. }
  7. // 创建一个对象
  8. var obj = new Object();
  9. // 为对象属性赋值
  10. obj.name = "刘建宏"
  11. obj.age = 16;
  12. obj.gender = "男";
  13. for (var i in obj) {
  14. // i 是对象的属性
  15. console.info(obj[i])
  16. }

4.3.5.2for of 循环

在ES6时,JavaScript提供了一种 for of 的循环,这种事 for in 循环的升级体,主要用来迭
代可迭代对象 -- iterable

  1. // arr是JavaScript中数组
  2. var arr = [1, 3, 454, 5, 6, 77]
  3. for (var i of arr) {
  4. console.info(i)
  5. }

5.函数

6.常见的内置对象-数组

6.1数组概述

6.2数组的定义方式

6.3常用数组操作

6.4二维数组

7.常见的内置对象

7.1Math

  1. /**
  2. * 一些常见的属性
  3. */
  4. // 算术常量 e,即自然对数的底数(约等于2.718)
  5. console.log(Math.E);
  6. // 圆周率
  7. console.log(Math.PI);
  8. // 2的平方根
  9. console.log(Math.SQRT2);
  10. var a = 4.99999;
  11. var b = 3.0001;
  12. /**
  13. * 一些常见的方法
  14. */
  15. // 向上取整
  16. console.log(Math.ceil(a));
  17. console.log(Math.ceil(b));
  18. // 向下取整
  19. console.info(Math.floor(a));
  20. console.log(Math.floor(b));
  21. // 绝对值
  22. console.info(Math.abs(-5));
  23. // 最大值和最小值
  24. console.info(Math.max(2, 5));
  25. console.info(Math.min(2, 5));
  26. // [0, 1) 区间的随机数
  27. console.info(Math.random());
  28. // 四舍五入
  29. console.info(Math.round(0.5));
  30. // 开平方根
  31. console.info(Math.sqrt(9));
  32. // 幂次方,类似于 **
  33. console.info(Math.pow(9, 2));
  34. // 还有些三角函数、对数等

7.2日期对象Date

  1. /**
  2. * js中获取系统当前时间
  3. */
  4. var date = new Date();
  5. // 获取参数对应的时间对象
  6. var date = new Date("2000-02-08 12:12:12");
  7. // 获取4位的年份
  8. var year = date.getFullYear();

7.3字符串包装类

7.3.1字符串对象的创建

7.3.2字符串的常见方法

  1. var str = "this is liushuaige";
  2. // 获取下标对应的字符
  3. c = str.charAt(9);
  4. alert(c); // i
  5. // 通过字符,得到字符第一次出现的下标索引
  6. index = str.indexOf("i")
  7. alert(index)
  8. // 获取字符最后一次出现的索引
  9. index = str.lastIndexOf("i")
  10. alert(index)
  11. // 获取下标对应的字符的Unicode编码值
  12. let str2 = "这个是就一个普通的字符串"
  13. alert(str.charCodeAt(9));
  14. alert(str2.charCodeAt(9));
  15. // 连接字符串,和 + 号作用类似
  16. var str1 = "Hello "
  17. var str2 = "world!"
  18. 12.4 Number 类型
  19. 刚刚学习了String字符串包装类,Boolean 类型比较简单,只有两个固定的值,没有方法和属
  20. 性,我们最后来看看数值这个基本数据类型的包装类吧。
  21. Number 类型有一些静态属性(直接通过 Number 调用的属性,而无须 new运算符)和方法,见
  22. 12-1
  23. alert(str1.concat(str2));
  24. // 使用正则匹配出需要的内容
  25. var str = "1 plus 2 equal 3"
  26. alert(str.match(/\d+/g)); // /g 表示全局查找
  27. // 使用正则替换掉内容
  28. var str = "Welcome to xianoupeng! "
  29. str=str + "We are 2010 year in xian "
  30. str=str + "and hai good 2020 year "
  31. alert(str.replace(/\d+/g, "****")) // /g 表示全局查找
  32. // 获取符合数据的下标
  33. var str="2020,Hoh, 2030, 2040!"
  34. alert(str.search(/\h+/i)) // /i 如果写上i,表示忽略大小写
  35. // 和数组一样,提取部分内容
  36. var str = "this is liushuaige";
  37. alert(str.slice(3, 5)) // 注意是前闭后开全局 [)
  38. // 按照特定的符号分割字符串,返回数组
  39. var str = "liujianhong is good man";
  40. var arr = str.split(" ")
  41. console.info(arr)
  42. // 注意:join是数组对象的方法,和数组中的join方法相反
  43. alert(arr.join("*"));
  44. /**
  45. * 提取字字符串
  46. * substr(start, length) 开始位置,长度
  47. * substring(start, end) //前闭后开区间 [)
  48. */
  49. alert(str.substr(2, 2))
  50. alert(str.substring(2,3))
  51. // 转小写
  52. var str3 = "LIuJiNHONG";
  53. var str4 = str3.toLowerCase()
  54. alert(str4)
  55. // 转大写
  56. var str5 = str4.toUpperCase()
  57. alert(str5)

7.4Number类型

JavaScript - 图2

8.BOM编程

window对象

BOM 的核心对象是 window,它表示浏览器的一个实例。window 对象处于 JavaScript结构的最顶层,对于每个打开的窗口,系统都会自动为其定义 window 对象。也就是每一个窗口就是一个window对象。你也可以理解为window对象代指的就是浏览器本身(虽然这样理解有点问题)。

BOM对象指的就是window对象和它的所属子对象history、location、navigator、screen、document等对象,其中document对象主要指的就是页面相关的部分,而页面是我们最重要的部分,因此ECMAScript将document相关的专门归为一类,就是下章节学习的DOM(Document Object Model)。这章节我们主要研究BOM

JavaScript - 图3

8.1windows对象

JavaScript - 图4

8.2history对象

history对象是 window对象的属性,它保存着用户上网的记录,从窗口被打开的那一刻算起

8.3screen对象

Screen 对象包含有关客户端显示屏幕的信息

  1. // 客户端的分辨率大小
  2. console.info(screen.height)
  3. console.log(screen.width)
  4. console.info(screen.availHeight)
  5. console.info(screen.availWidth)

8.4navigator对象

navigator封装的是浏览器的内核信息。
常见的Navigator 对象属性

JavaScript - 图5

8.5location对象

Location 对象包含有关当前 URL 的信息,其中方法只要掌握reload(刷新页面)即可,其他的一些属性需要掌握

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript">
  7. function reflush() {
  8. // 刷新页面
  9. location.reload()
  10. }
  11. setInterval(function () {
  12. // 每2秒钟,执行一次刷新
  13. location.reload();
  14. }, 2000);
  15. // 主机名称
  16. console.info(location.hostname)
  17. // 主机端口
  18. console.info(location.port)
  19. // host: 名称 + 端口
  20. console.info(location.host)
  21. // 网络协议: HTTPS、HTTP、file等
  22. console.info(location.protocol)
  23. // URI
  24. console.info(location.pathname)
  25. // URL
  26. console.info(location.href)
  27. // ?问号后面的值
  28. console.log(location.search)
  29. // # 号后面的值
  30. console.info(location.hash)
  31. setInterval(function () {
  32. // 页面跳转
  33. // location.href = "http://www.baidu.com";
  34. // 完成页面替换,则页面就会发生跳转
  35. location.href = location.href.replace("location.html", "screen屏幕.html ")
  36. }, 3000)
  37. </script>
  38. </head>
  39. <body>
  40. <button onclick="reflush()">刷新</button>
  41. </body>
  42. </html>

9.DOM编程

9.1document对象

document对象就是window对象的子对象,主要代指的就是浏览器的可见部分(页面主体),因为页面是客户最终要看到的结果,所以DOM编程就显得尤为重要了。

在DOM中,document -> html对象 -> head、body,以此类推,所以最后就形成了一个倒着的DOM树,最高处就是document对象。每一个对象都有对应的属性和方法,如一个div标签,就存在id、title等属性。

9.1.1document对象属性

JavaScript - 图6

9.1.2document对象方法

JavaScript - 图7

9.2获取DOM对象的几种方式

在早期JavaScript版本中,共有五种获取DOM对象的几种方式,如下所示:

  1. // 直接通过id获取【不推荐使用】 高版本浏览器都慢慢开始不支持了,知道有这么回事就可以了
  2. // 通过id获取
  3. // document.getElementById()【重要,必须掌握】
  4. // 通过标签名称
  5. // document.getElementsByTagName() 【重要,掌握】
  6. // 通过name属性(一般是表单元素用)
  7. // document.getElementsByName() 【会用】
  8. // 通过class属性获取
  9. // document.getElementsByClassName() 【重要,必须掌握】

JavaScript在后面的版本中增加了两种新的获取DOM对象方法:document.querySelector()、
document.querySelectorAll()。

9.3DOM对象节点

节点 node 可以分为元素节点、属性节点和文本节点,而这些节点又有三个非常有用的属性,分别为:nodeName、nodeType 和 nodeValue

document.getElementById('box').nodeType // 1表示元素节点

节点的层次结构可以划分为: 父节点与子节点 、 兄弟节点 这两种。当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点

JavaScript - 图8

9.4操作DOM对象的内容

DOM中,当我们获取DOM对象后,有可能需要修改DOM对象的内容,那么有如下三种方式:

  • innerText【非W3C标准】
  • textContent【W3C标准】
  • innerHTML 【慎用】 // XSS攻击

innerHTML插入的子元素会解析HTML标签,innerText和textContent不会解析标签,只是将内容
当成文本插入

  1. <!DOCTYPE html>
  2. <html>q
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script>
  7. /**
  8. * window.onload事件,表示页面加载完成后触发
  9. */
  10. window.onload = function () {
  11. // javascript 现在命名建议在前面加_,是一种新的命名规范
  12. // 但是注意:innerHTML容易引发XSS攻击,使用这个属性插入的值
  13. // 一定要属于安全数据(过滤过或者来源可靠)。
  14. let _box = document.querySelector("#box");
  15. _box.innerHTML = "<h1>这个是内容</h1>"
  16. // innerText仅仅操作标签及其子标签文本内容
  17. // innerText 非w3c规范,
  18. let _show = document.querySelector("#show");
  19. _show.innerText = "<h1>这个是内容</h1>";
  20. // w3c规范操作文本的属性
  21. _show.textContent = "<h1>这个是内容</h1>";
  22. }
  23. </script>
  24. </head>
  25. <body>
  26. <div id="show">
  27. <p>这个是p标签</p>
  28. </div>
  29. <div id="box"></div>
  30. </body>
  31. </html>

XSS:Cross Site Scripting(跨站脚本攻击),最常见的web攻击之一

9.5操作DOM对象的属性

常见的DOM对象属性操作有三种方式:

  • DOM对象.属性名称
  • DOM对象[属性名称]
  • 调用系统API - getAttribute(属性名称)、setAttribute(属性名称, 属性值)

9.6操作DOM对象的样式

获取样式的值(有单位)

  • 行内样式:标签对象.style.样式名称
  • getComputedStyle(标签对象).样式名称 【兼容IE9+】
  • 标签对象.currentStyle.样式名称 【低版本IE】

获取样式的数值(无单位,数字)

https://blog.csdn.net/qq_35430000/article/details/80277587

offsetWidth
offsetHeight
offsetTop
offsetLeft

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>操作DOM对象的样式</title>
  6. <style type="text/css">
  7. #show {
  8. height: 300px;
  9. border: 1px solid red;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div style="width: 300px;" id="show" onclick="scale()">这个是一个div</div>
  15. <script>
  16. var _show = document.getElementById("show");
  17. // 1、第一种方式:DOM对象.style.样式 这种方式,只能获取行内样式
  18. //获取样式的中的宽和高
  19. console.log(_show.style.width);
  20. console.log(_show.style.height);
  21. // 2、第二种方式,w3c规定获取样式值的方式
  22. console.log(getComputedStyle(_show).height)
  23. console.info(getComputedStyle(_show).width)
  24. function scale() {
  25. var _show = document.getElementById("show");
  26. // 获取宽和高
  27. var h = getComputedStyle(_show).height;
  28. var w = getComputedStyle(_show).width;
  29. console.info(h, w)
  30. // 因为有单位,是字符串,需要先去掉,运算完成后,在拼接单位
  31. _show.style.height = parseInt(h) + 10 + "px";
  32. _show.style.width = parseInt(w) + 10 + "px";
  33. // 获取宽和高,只能获取行内样式
  34. console.log(_show.offsetHeight, _show.offsetWidth)
  35. console.log(_show.clientHeight, _show.clientWidth)
  36. _show.style.height = _show.offsetHeight + 10 + "px";
  37. _show.style.width = _show.offsetWidth + 10 + "px";
  38. }
  39. </script>
  40. </body>
  41. </html>

10.事件对象