1. JavaScript 的概念
JavaScript 是一门客户端脚本语言
客户端就是运行在客户端浏览器中的
脚本语言就是不需要编译,直接就可以被解析执行的语言
2. JavaScript 的功能
-
可以来增强用户和 HTML 页面的交互过程
-
可以来控制 HTML 元素,让页面有一些动态的效果,增强用户的体验
3. JavaScript 发展史
- 1992年,Nombase 公司,开发出第一门客户端脚本语言,专门用于表单的校验,可以防止用户非法数据的提交,增强用户的体验。命名为:C – ,但这门语言当时并没有多少人使用。后来更名为:ScriptEase。
- 1995年,Netscape (网景)公司,借鉴了 C-- 语言的思想,开发了一门客户端脚本语言:LiveScript。后来,请来 SUN 公司的专家,修改 LiveScript,命名为 JavaScript。
- 1996年,微软抄袭 JavaScript 开发出 JScript 语言。
- 1997年,ECMA(欧洲计算机制造商协会),制定出客户端脚本语言的标准:ECMAScript,统一了所有客户端脚本语言的编码方式。
4. JavaScript 语言的构成
JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
5. ECMAScript:客户端脚本语言的标准
5.1 基本语法
5.1.1 JavaScript 与 HTML 的结合方式
- 内部 JS:在 html 中定义
<script>
,标签体内容就是 js 代码 - 外部 JS:在 html 中定义
<script>
,通过 src 属性引入外部的 js 文件
注意:
<script>
可以定义在 html 页面的任何地方。但是定义的位置会影响执行顺序。<script>
可以定义多个。
5.1.2 注释
-
单行注释:
// 单行注释
-
多行注释:
/** * 多行注释 */
5.1.3 变量
-
JavaScript 是弱类型语言
- 强类型:在开辟变量存储空间时,定义了空间将来存储数据的数据类型,只能存储固定类型的数据。
- 弱类型:在开辟变量存储空间时,不定义空间将来存储数据的数据类型,可以存储任意类型的数据。
-
创建变量
var 变量名 = 变量值;
-
typeof 运算符:获取变量的类型
typeof(变量名)
注意:null 获取变量的类型是 object
5.1.4 数据类型
-
原始数据类型
-
number:数字
// 整数 var num1 = 1; // 小数 var num2 = 1.5; // NaN var num3 = NaN;
-
string:字符串
var str1 = "abc"; var str2 = 'def';
-
boolean:布尔
var flag1 = true; var flag2 = false;
-
null:一个对象为空的占位符
var obj = null;
-
undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为 undefined。
var obj1 = undefined; // 等效于下面这条语句 var obj2;
注意:null == undefined 会返回 true,因为它们是类似的值;但 null === undefined 会返回false,因为它们是不同类型的值。
document.write((undefined == null)+"<br>");// true document.write((undefined === null)+"<br>");// flase
-
-
引用数据类型:对象
5.1.5 运算符
-
算术运算符
运算符 描述 + 加法(正号) - 减法(负号) * 乘法 / 除法 % 取模 ++ 自增 – 自减 -
赋值运算符
运算符 例子 等同于 = x=y += x+=y x=x+y -= x-=y x=x-y *= x*=y x=x*y /= x/=y x=x/y %= x%=y x=x%y -
比较运算符
运算符 描述 == 等于 === 绝对等于(值和类型均相等) != 不等于 !== 不绝对等于(值和类型有一个不相等,或两个都不相等) > 大于 < 小于 >= 大于或等于 <= 小于或等于 -
逻辑运算符
运算符 描述 && 与 || 或 ! 非 -
条件运算符
语法格式:
variablename=(condition)?value1:value2;
判断 condition 的值,如果是 true 则取值 value1,如果是 false 则取值 value2
5.1.6 自动类型转换
在 JS 中,如果运算数不是运算符所要求的类型,那么 JS 引擎会自动的将运算数进行类型转换。
-
string 转 number
如果字面值是数字,按照字面值转换。如果字面值不是数字,则转为NaN
var a = +"123"; var b = +"abc"; document.write(a+"<br>");// 123 document.write(b+"<br>");// NaN
-
boolean 转 number
true 转为 1,false 转为 0
var flag1 = +true; var flag2 = +false; document.write(flag1+"<br>");// 1 document.write(flag2+"<br>");// 0
-
null 转 number
var obj1 = +null; document.write(obj1+"<br>");// 0
-
undefined 转 number
var obj2 = +undefined; document.write(obj2+"<br>");// NaN
-
其他类型转 boolean:
- number: 0 或 NaN 为 false,其他为 true
- string:除了空字符串(""),其他都是 true
- null & undefined:都是 false
- 对象:所有对象都为 true
var obj1 = "abc"; if(obj1.length > 0){ alert(123); } //js中可以这样定义,简化书写。 if(obj1){ alert(123); } var obj2 = new Date(); if(obj2 != null){ alert(124); } //js中可以这样定义,简化书写。 if(obj2){ alert(124); }
5.1.7 流程控制语句
- if…else…
- switch(在 JS 中,switch 语句可以接受任意的原始数据类型)
- while
- do…while
- for
5.1.8 练习九九乘法表
- 效果展示
-
编码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> table{ margin: auto; } td{ border: 1px solid; } </style> <script> document.write("<table>"); for (var i = 1; i < 10; i++) { document.write("<tr>"); for (var j = 1; j <= i ; j++) { document.write("<td>"); document.write(j+"*"+i+"="+i*j+" "); document.write("</td>"); } document.write("</tr>"); } document.write("</table>"); </script> </head> <body> </body> </html>
5.2 基本对象
5.2.1 Function:函数对象
-
函数定义
-
构造函数定义(不推荐使用)
var myFunction = new Function("a","b","return a*b"); var x = myFunction(2,4);
-
函数表达式定义
var myFunction = function (a,b) { return a*b; }; var x = myFunction(2,4);
-
函数声明定义
function myFuction(a,b) { return a*b; } var x = myFuction(2,4);
-
-
属性
arguments.length:返回形参的个数
-
特点
-
函数定义时,形参的类型和返回值类型都可以不写
-
定义名称、参数相同的函数,会覆盖前面那个函数
function myFuction(a,b) { return a; } function myFuction(a,b) { return a*b; } document.write(myFuction(3,4));// 12
-
函数的调用只与函数的名称有关,实参和形参不一样也能执行
function myFuction(a,b) { return a; } var w = myFuction();// undefined var x = myFuction(2);// 2 var y= myFuction(2,3);// 2 var z = myFuction(2,3,4);// 2
-
在函数声明中有一个隐藏的内置对象(数组)arguments,封装所有的实际参数。
// 求任意个数的数的和 function add() { var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } document.write(add(2,4,7));// 13
-
5.2.2 Array:数组对象
-
创建数组
-
常规方式
// 不指定数组长度 var arr1 = new Array(); arr1[0] = 1; arr1[1] = 2; // 指定数组长度 var arr1 = new Array(2); arr1[0] = 1; arr1[1] = 2;
-
简洁方式
var arr3 = new Array(1,2);
-
字面方式
var arr4 = [1,2];
-
-
属性
length:数组的长度
-
方法
-
join(参数):将数组中的元素按照指定的分隔符拼接为字符串,默认为逗号,可传入参数作为分隔符。
var arr = new Array(1,2,3); document.write(arr.join());// 1,2,3
-
push():向数组的末尾添加一个或更多元素,并返回新的长度。
var arr = new Array(1,2,3); arr.push(4,5,6); document.write(arr);// 1,2,3,4,5,6
-
-
特点
-
JS 中,数组元素的类型可变的。
var arr = [1,"abc",true];
-
JS 中,数组长度可变的。
var arr = new Array(2); arr[0] = 1; arr[1] = 2; arr[10] = 3; document.write(arr.length);// 11
-
5.2.3 Boolean
5.2.4 Date:日期对象
-
创建 Date 对象
var date = new Date();
-
方法
-
toLocaleString():返回当前date对象对应的时间本地字符串格式
var date = new Date(); document.write(date.toLocaleString());// 2019/7/24 下午4:13:45
-
getTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差。
var date = new Date(); document.write(date.getTime()+"<br>")// 1563956231727
-
5.2.5 Math:数学对象
-
创建
Math对象不用创建,直接使用。
-
方法
-
random():返回 0 ~ 1 之间的随机数。 (含0不含1)
document.write(Math.random());// 0.7376054211737
-
round(x):把数四舍五入为最接近的整数
document.write(Math.round(3.14));// 3 document.write(Math.round(-3.14));// -3
-
ceil(x):对数进行上舍入。即大于该数的最小整数。
document.write(Math.ceil(3.14));// 4 document.write(Math.ceil(-3.14));// -3
-
floor(x):对数进行下舍入。即小于该数的最大整数。
document.write(Math.floor(3.14));// 3 document.write(Math.floor(-3.14));// -4
-
-
属性
document.write(Math.PI);// 3.141592653589793
5.2.6 Number
5.2.7 String
5.2.8 RegExp:正则表达式对象
-
正则表达式的概念
定义字符串的组成规则。
-
正则表达式的使用
-
单个字符
- [abc]:查找方括号之间的任何字符。
- [0-9]:查找任何从 0 至 9 的数字。
- [a-z]:查找任何从小写 a 到小写 z 的字符。
- [A-Z]:查找任何从大写 A 到大写 Z 的字符。
- \d:单个数字字符 0-9
- \w:用于查找单词字符。(单词字符包括:a-z、A-Z、0-9,以及下划线, 包含 _ (下划线) 字符。)
-
量词符号
{m,n}:表示 m <= 数量 <= n
m 如果缺省:{,n}:最多n次
n 如果缺省:{m,}:最少m次 -
开始结束符号
- ^:开始
- $:结束
-
-
正则表达式对象的创建
var reg = new RegExp("正则表达式"); // 或更简单的方法 var reg = /正则表达式/;
-
正则表达式对象的方法
- test(参数):验证指定的字符串是否符合正则定义的规范
-
正则表达式练习
// 要求用户名为 6-10 个单词字符 var reg = /^\w{6,10}$/; var username1 = "ZhangSan"; var username2 = "LiSi"; var username3 = "WangWu123"; var username4 = "小明12345"; document.write(reg.test(username1)+"<br>");// true document.write(reg.test(username2)+"<br>");// false document.write(reg.test(username3)+"<br>");// true document.write(reg.test(username4)+"<br>");// false
5.2.9 Global:全局对象
-
特点
Global 中封装的方法不需要对象就可以直接调用。
-
方法
-
URL 编码的概念
在浏览器中访问,做数据传输时需要通过 HTTP 协议,而协议不支持中文数据,所以中文数据要发送到服务端,就需要先进行转码,转码通常采用 URL 编码。
注意:如果采用 GBK 编码,那么 1 个汉字转成 2 个字节;
如果采用 UTF-8 编码,那么 1 个汉字转成 3 个字节
1 个字节对应 1 个 % 加 两个十六进制数
-
encodeURI():URL 编码
var encode = encodeURI("https://www.baidu.com/s?ie=UTF-8&wd=数据结构"); document.write(encode);
编码后:
https://www.baidu.com/s?ie=UTF-8&wd=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
-
decodeURI():URL 解码
var decode = decodeURI("https://www.baidu.com/s?ie=UTF-8&wd=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84"); document.write(decode);
解码后:
https://www.baidu.com/s?ie=UTF-8&wd=数据结构
-
encodeURIComponent():URL 编码,编码的字符更多
var encode = encodeURIComponent("https://www.baidu.com/s?ie=UTF-8&wd=数据结构"); document.write(encode);
编码后:
https%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3DUTF-8%26wd%3D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
-
decodeURIComponent():URL 解码,解码的字符更多
var decode = decodeURIComponent("https%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3DUTF-8%26wd%3D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84"); document.write(decode);
解码后:
https://www.baidu.com/s?ie=UTF-8&wd=数据结构
-
parseInt():将字符串转为数字(逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number)
var str1 = "123" var str2 = "12a3"; var str3 = "a123"; document.write(parseInt(str1)+"<br>");// 123 document.write(parseInt(str2)+"<br>");// 12 document.write(parseInt(str3)+"<br>");// NaN
-
isNaN():判断一个值是否是 NaN
var a = NaN; // NaN 参与的 == 比较全部问 false document.write(a == NaN);// false document.write(isNaN(a));// true
-
eval():计算 JavaScript 字符串,并把它作为脚本代码来执行。
var jscode = "alert(123)"; eval(jscode);// 执行 alert(123)
-