JavaScript - Note01 ECMAScript
JavaScript
JavaScript 是运行在浏览器上的脚本语言,简称 JS,是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序(事件前加 on 代表事件的句柄)
页面打开时,js 代码并不会执行,只是把这段代码注册到事件上,等事件发生后,注册在句柄后的 js 代码会被浏览器自动调用
JavaScipt 虽然带有 Java,但是没有任何关系,只是语法有点类似,运行位置不同(Java 运行在 JVM 中,JS 运行在浏览器中)
JavaScript 程序不需要程序员手动编译,编写完代码后,浏览器直接打开解释运行
JavaScript 的“目标程序”以普通文本形式保存,这种语言都叫做“脚本语言”
嵌入方式
JS 中的字符串可以使用单/双引号
JS 语句结束的分号可省可不省
直接添加属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>嵌入1</title>
</head>
<body>
<!-- 实现功能:用户点击以下按钮,弹出消息框 -->
<!-- 鼠标点击事件 click(事件句柄 onclick,以 html 标签属性存在) -->
<!-- js 中内置 window 对象(浏览器对象),通过 window 对象 alert 实现弹窗 -->
<input type="button" value="hello" onclick="window.alert('hello vv!')">
<!-- 其中 window. 可省略 -->
<input type="button" value="hello" onclick="alert('hello ee!')">
</body>
</html>脚本块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<!-- JS 脚本块页面中可出现多次,且出现位置无要求 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>嵌入2</title>
</head>
<body>
<script>
// 暴露在脚本块中的程序,在页面打开时执行,并且遵循自上而下的原则
alert("hello vv");
alert("hello vv2");
</script>
<input type="button" value="I'm a button">
</body>
</html>- alert 会阻塞页面加载,直到用户点击确定按钮
文件引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>嵌入3</title>
</head>
<body>
<!-- 在需要的位置引入 js 脚本文件 -->
<!--
不能省略反标签:
<script scr='...' />
引入文件时,方法体中的代码不会执行,但可重写一个代码块
-->
<script src="js/03.js"></script>
</body>
</html>
变量
JavaScript 是一种弱类型语言,声明变量无需指定类型,可接收任意类型变量
Java 是一种强类型语言,变量声明时的类型,之后不可变
1 |
|
在 JS 中,当一个变量没有手动赋值时,系统默认赋值 undefined,其在 JS 中是一个具体存在的值
1 |
|
若未声明变量直接访问则会报错(须在浏览器控制台查看错误信息)
1 |
|
连续定义
1 |
|
作用域
全局变量:在函数体之外,生命周期是浏览器打开到关闭(尽量少用,占用浏览器内存)
局部变量:在函数体中,包括形参,生命周期是函数开始到结束
示例代码:
1 |
|
如果变量未使用 var 声明,则该变量无论位置,皆为全局变量
1
2
3
4
5// 变量未使用 var 声明,该变量为全局变量
function myfun() {
me = "myfun()";
}
alert(me); // myfun()
函数
可被重复利用的代码片段,用于完成某个特定功能
语法格式:
1 |
|
- JS 中的函数不需要指定返回值类型
示例代码:
1 |
|
调用
JS 中的函数调用时,参数类型、参数个数均无限制
1 |
|
同名函数会自动覆盖:
1 |
|
数据类型
虽然声明时不需要指定数据类型,但在赋值时还是有数据类型
原始类型:Undefined, Number, String, Boolean, Null
引用类型:Object 以及 Object 的子类
ES规范(ECMAScript)在 ES6 之后,新增了 Symbol
typeof
可以在程序的运行阶段动态的获取变量的数据类型
语法格式:
1 |
|
typeof 运算符结果是以下 6 个字符串之一(全都小写)
“undefined”, “number”, “string”, “boolean”, “object”, “function”
JS 中比较字符串使用双等号完成
Undefined
Undefined 类型只有一个值,这个值就是 undefined
当一个变量没有手动赋值,系统默认赋值 undefined,也可以手动赋值 undefined
1 |
|
Number
包括:整数、小数、正数、负数、不是数字(NaN)、无穷大(Infinity)
1 |
|
NaN(Not a number),不是一个数字,但属于 Number 类型。本来是数字运算,当运算完却不是数字时,结果是 NaN
1 |
|
Infinity,当除数为0是结果为无穷大
1 |
|
常用函数
isNaN()
括号中填数据,结果是 true 表示不是一个数字,结果是 false 表示是一个数字
1
2
3
4
5
6
7
8
9
10// 改进 sum
function sum(a, b) {
if (isNaN(a) || isNaN(b)) {
alert(a + " and " + b + " not all number");
return
}
return a + b;
}
alert(sum(10, "vv"));parseInt()
将字符串自动转换为数字,并且取整数位
1
2
3// parseInt()
alert(parseInt(3.14)); // 3
alert(parseInt("4.15")); // 4parseFloat()
将字符串自动转换为数字
1
2
3// parseFloat()
alert(parseFloat(4.44)); // 4.44
alert(parseFloat("5.553") + 1); // 6.553Math.ceil()
Math 是数学类,函数的作用是:向上取整
1
2// Math.ceil()
alert(Math.ceil(3.11));
Boolean
JS 中的布尔类型永远只有 true 和 false
Boolean 类型中有一个函数叫做:Boolean()
语法格式:
1 |
|
- 将非布尔类型转换成布尔类型
if 中若不为 boolean 类型,则调用 Boolean() 函数自动转换
1 |
|
Boolean() 自动转换规律:
1 |
|
Null
Null 类型只有一个数据 null
- typeof(null) 结果为 object 类型
String
JS 中字符串可以使用单引号或双引号
创建字符串的两种方式:
直接使用引号
1
var s1 = "abc";
使用 JS 内置支持类 String
1
var s2 = new String("def");
- String 是一个内置的类,可以直接使用,父类是 Objcet
测试两种定义方式的数据类型:
1 |
|
常用属性
length
获取字符串长度
常用函数
indexOf()
获取指定字符串在当前字符串中第一次出现处的索引
1
2
3
4alert("http://wataaaame.github.io".indexOf("http")); // 0
alert("http://wataaaame.github.io".indexOf("https")); // -1
// 引申:判断一个字符串中是否包含某一个字符串?
alert("http://wataaaame.github.io".indexOf("https") >= 0 ? "包含" : "不包含"); // 不包含lastIndexOf()
获取指定字符串在当前字符串中最后一次出现处的索引
replace()
替换
1
2
3
4// replace
// 默认只替换第一个
// 想全部替换需要正则表达式
alert("a & b & c & d".replace("&", "+")); // a + b & c & dsubstr()
截取子字符串
substring()
截取子字符串
1
2
3
4
5var str = "abcdefg";
// substr(startIndex, length)
alert(str.substr(2, 4)); // c d e f
// substring(startIndex, endIndex)(左闭右开)
alert(str.substring(2, 4)); // c dtoLowerCase()
转换小写
toUpperCase()
转换大写
split()
拆分字符串
Object
Object 类型是所有类型的超类,自定义的任何类型,默认继承 Object
JS 中定义的类默认继承 Object,会继承类中所有的属性以及函数
prototype 属性:给类动态地扩展属性和函数
定义类:
1 |
|
创建对象:
1 |
|
类与函数:
1 |
|
类的定义同时又是一个构造函数的定义:
1 |
|
类中方法:
1 |
|
- 静态方法也需要创建对象后调用
prototype 属性动态扩展
1 |
|
null NaN undefined
区别 | null | NaN | undefined |
---|---|---|---|
数据类型不一致 | object | number | undefined |
== | 与 undefined 等同 | 与 NaN 等同 | |
=== | false | false | false |
JS 中两个特殊运算符
- ==,等同运算符,只判断值
- ===,全等运算符,既判断值又判断数据类型
1 |
|
事件
事件是可以被控件识别的操作
任何一个事件都对应一个时间句柄,事件句柄是在时间前添加 on,以属性的形式存在
类别
焦点
- blur 失去焦点
- focus 获得焦点
鼠标
- click 鼠标单击
- dblclick 鼠标双击
- mousedown 鼠标按下
- mouseup 鼠标弹起
- mousemove 鼠标移动
- mouseover 鼠标经过
- mouseout 鼠标离开
键盘
keydown 键盘按下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<script>
window.onload = function() {
// 获取键值,浏览器传递一个事件对象供函数调用
document.getElementById("username").onkeydown = function(event) {
// 对于“键盘事件对象”来说,都有 keyCode 属性用来获取键值
// 回车键的键值是 13
// ESC键的键值是 27
if (event.keyCode == 13) {
alert("login success!");
}
}
}
</script>
<input type="text" id="username">keyup 键盘弹起
表单
- reset 表单重置
- submit 表单提交
其他
change 下拉列表选中项改变,或文本框内容改变
select 文本被选中
load 页面加载完毕
整个 HTML 页面中所有的元素全部加载完毕之后发生
注册方式
标签中直接使用事件句柄
1
2
3
4
5
6
7
8<script>
// 函数被调用称为:callback(回调函数)
function sayHello() {
alert("Hello");
}
</script>
<input type="button" value="sayHello" onclick="sayHello()">使用纯 JS 代码
1
2
3
4
5
6
7
8
9
10
11<input type="button" value="document" id="mybtn">
<script>
function sayDoc() {
alert("Document");
}
// 第一步:先获取这个按钮对象(document 为内置对象,代表整个页面)
var btnObj = document.getElementById("mybtn")
// 第二步:给按钮对象的 onclick 属性赋值
// 此处函数不能加小括号,否则会自动执行
btnObj.onclick = sayDoc;
</script>支持匿名函数:
1
2
3
4
5
6
7
8<input type="button" value="niming" id="btnniming">
<script>
// 支持匿名函数
// 页面打开时仅注册,事件发生后才会调用
document.getElementById("btnniming").onclick = function() {
alert("niming function");
}
</script>
JS 代码执行顺序
1 |
|
也可以不在标签内写 onload
1 |
|
设置节点属性
1 |
|
void 运算符
void(表达式)
void 运算符执行括号中的表达式,但不返回任何结果
示例代码:
1 |
|
控制语句
if, switch, while, do…while…, for, break, continue,
for…in
1 |
|
with
自动将 类名.
加到属性前面
1 |
|
Array
1 |
|
数组方法:
1 |
|