JavaWeb开发学习笔记_JavaScript
JS的引入方式
内部脚本
将JS代码定义在HTML页面中
- JavaScript代码必须位于
<script></script>
标签之间 - 在HTML文档中,可以在任意地方,放置任意数量的
<script>
- 一般会把脚本置于
<body>
元素的底部,可改善显示速度
<script>
alert('Hello JS');
</script>
外部脚本
将JS代码定义在外部JS文件中,然后引入到HTML页面中
- 外部JS文件中,只包含JS代码,不包含
<script>
标签 <script>
标签不能自闭合
<script src="js/demo.js"></script>
JS文件代码如下:
alert('Hello JS');
JS的基础语法
书写语法
- 区分大小写
- 每行结尾的分号可有可无(建议有)
- 注释:
- 单行注释:
//
- 多行注释:
/**/
- 单行注释:
- 输出语句, 代码如下:
<script>
// 输出语句
// 浏览器弹出警告框
window.alert("Hello JavaScript");
// 可以缩写为 alert("Hello JavaScript");
// 写入HTML, 在浏览器显示
document.write("Hello JavaScript");
// 写入浏览器控制台
console.log("Hello JavaScript");
</script>
变量
- 用var关键字声明变量.
- 弱类型语言, 变量可以存放不同类型的值.
- ES6: let, const.
<script>
// var定义变量
// var a = 10;
// a = "张三";
// alert(a);
// 特点1: 变量为全局变量
// {
// var x = 1;
// }
// alert(x);
// 特点2: 可以重复定义
// var t = 1;
// var t = "A";
// alert(t);
// let关键字: 局部变量, 不能重复定义.
// const关键字: 常量, 不能改变.
</script>
数据类型和运算符
数据类型
- 引用类型
- 原始类型
- number: 数字. 整数, 小数, NaN(Not a Number)
- string: 字符串. 单双引号皆可
- boolean: 布尔. true, false
- null: 对象为空
- undefined: 当声明的变量未初始化时,该变量的默认值是undefined
<script>
// 原始数据类型
// number
alert(typeof 3);
alert(typeof 3.14);
// string
alert(typeof "A");
alert(typeof 'Hello');
// boolean
alert(typeof true);
alert(typeof false);
// object(bug, 解释为空对象)
alert(typeof null);
// undefined
var a;
alert(typeof a);
</script>
运算符
==
和===
==
会类型转换, ===
不会类型转换
<script>
var a=10;
alert(a == '10'); // true
alert(a === '10'); // false
alert(a === 10); // true
</script>
类型转换
字符串转为数字
如果字符串不是数字, 则转为NaN
<script>
alert(parseInt("12")); // 12
alert(parseInt("12A45")); // 12
alert(parseInt("A45")); // NaN (not a number)
</script>
其他类型转为boolean
- number: 0和NaN为false, 其他为true
- string: 空字符串为false, 其他为true
- null和undefined: 转为false
<script>
if(!0){
alert("0 转换为 false");
}
if(!NaN){
alert("NaN 转化为 false");
}
if(-1){
alert("除0和NaN, 其他数字都转为true");
}
if(!""){
alert("空字符串为false, 其他都是true");
}
if(!null){
alert("null 转化为 false");
}
if(!undefined){
alert("undefined 转化为 false");
}
</script>
JS函数
<script>
// 定义函数-1
function add(a, b)
{
return a+b;
}
// 定义函数-2
var add = function(a, b)
{
return a+b;
}
// 调用函数
var res = add(1, 2);
alert(res);
</script>
JS中, 函数调用可以传递任意个数的参数
JS对象
Array
<script>
// 定义数组
var arr = new Array(1, 2, 3, 4)
var arr = [1, 2, 3, 4]
// 特点: 长度可变, 类型可变
arr[10] = "A"
console.log(arr[9]); // undefined
console.log(arr);
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// 遍历有值的元素
arr.forEach(function(e){
console.log(e);
});
// ES6: 箭头函数
arr.forEach(e => {
console.log(e);
});
// push: 添加元素到数组末尾
arr.push(7);
// splice: 删除元素
arr.splice(2, 2); // 从下标2开始删2个
</script>
String
<script>
// 创建字符串
var s1 = new String("Hello");
var s2 = " Hello World ";
// 长度
console.log(s1.length); // 5
// 指定下标上的字符
console.log(s1.charAt(0)); // 'H'
// 字符串的位置
console.log(s1.indexOf("lo")); // 3
// 去除字符串两侧的空格
var s3 = s2.trim();
console.log(s3); // "Hello World"
// 截取字符串, substring(开始索引, 结束索引), 左闭右开
console.log(s3.substring(0, 5)); // "Hello"
</script>
JSON
- 概念: JavaScript Object Notation, JavaScript对象标记法
- JSON是通过JavaScript对象标记法书写的文本
- 由于其语法简单, 层次结构鲜明, 现多用于作为数据载体, 在网络中进行数据传输
- value的数据类型:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
var 变量名 = '{"key1":value1, "key2":value2}'
, key外必须是双引号
<script>
// 自定义对象
var user = {
name: "Tom",
age: 10,
gender: "male",
// eat: function(){
// console.log("吃饭");
// }
eat(){
console.log("吃饭");
}
};
console.log(user.name);
user.eat();
// 定义JSON
var JsonStr = '{"name":"Tom", "age":10, "addr":["北京", "上海", "深圳"]}';
console.log(JsonStr.name); // undefined
// JSON字符串 -> JSON对象
var JsonObj = JSON.parse(JsonStr);
console.log(JsonObj.addr); // ['北京', '上海', '深圳']
// JSON对象 -> JSON字符串
var JsonStr2 = JSON.stringify(JsonObj);
console.log(JsonStr2); // {"name":"Tom","age":10,"addr":["北京","上海","深圳"]}
</script>
BOM
概念: Browser Object Model 浏览器对象模型, 运行JavaScript与浏览器对话, JavaScript将浏览器的各个组成部分封装为对象.
组成:
- Window: 浏览器窗口对象
- Navigator: 浏览器对象
- Screen: 屏幕对象
- History: 历史记录对象
- Location: 地址栏对象
Window对象
- 获取: 直接使用window, 可以省略
window.
- 属性:
- history: 对History对象的只读引用
- location: Location对象
- 对Navigator对象的只读引用
- 方法:
- alert(): 显示带有一段消息和一个确认按钮的警告框
- confirm(): 显示带有一段消息以及确认按钮和取消按钮的对话框
- setInterval(): 周期调用函数或表达式
- setTimeout(): 延迟调用函数或表达式
<script>
// 获取window对象, window可以省略
window.alert("Hello BOM");
// 方法
// confirm: 对话框, 确认:true, 取消:false.
var flag = confirm("BOM测试");
alert(flag);
// 定时器
setInterval: 周期执行
var cnt=0;
setInterval(function(){
console.log("定时器执行了"+(++cnt)+"次");
}, 2000);
// setTimeout: 延迟执行
setTimeout(function(){
alert("延迟执行Test");
}, 3000);
</script>
Location对象
地址栏对象, 通过href属性
设置或返回URL
.
<script>
// Location
alert(location.href);
location.href = "https://www.itcast.cn";
</script>
DOM
- 概念: Document object Model, 文档对象模型.
- 将标记语言的各个组成部分封装为对应的对象:
- Document: 整个文档对象
- Element:元素对象
- Attribute: 届性对象
- Text:文本对象
- Comment:注释对象
- DOM是W3C(万维网联盟)的标准, 定义了访问HTML和XML文档的标准,分为3个不同的部分:
- Core Dom: 所有文档类型的标准模型
- XML DOM: XML文档的标准模型
- HTML DOM: HTML文档的标准模型
<script>
function fun1(){
// 根据标签名称获取, 返回Element对象数组
var h1s = document.getElementsByTagName('h1');
h1s[0].innerHTML="改变内容test";
}
function fun2(){
// 根据id属性值获取, 返回单个Element对象
var h1 = document.getElementById('h1_center');
h1.style = "color: red";
}
function fun3() {
// 根据class属性值获取, 返回Element对象数组
var trs = document.getElementsByClassName('cls');
trs[trs.length-1].remove();
}
// 根据name属性值获取, 返回Element对象数组
var hobbes = document.getElementsByName('hobby');
hobbes.forEach(e => {
console.log(e.value);
});
</script>
DOM案例
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
<img src="C:\Users\cen\Desktop\微信图片_20230123145822.jpg" width="50%" onclick="fun1()">
<div onclick="fun2()">Hello</div>
<div onclick="fun2()">JavaScript</div>
<input type="checkbox" name="hobby" onclick="fun3()">c++
<input type="checkbox" name="hobby">Java
<input type="checkbox" name="hobby">Python
</body>
<script>
function fun1() {
var imgs = document.getElementsByTagName('img');
imgs[0].src = "C:/Users/cen/Desktop/7c2953849b8b1ebe0009d778f64224444190c289.jpg";
}
function fun2() {
var divs = document.getElementsByTagName('div');
for (let i = 0; i < divs.length; i++) {
const div = divs[i];
div.innerHTML += "<font color='red'> 泥嚎</font>";
}
}
function fun3() {
var hobbes = document.getElementsByName('hobby');
for (let i = 0; i < hobbes.length; i++) {
const hobby = hobbes[i];
hobby.checked = true;
}
}
</script>
</html>
事件
事件绑定
<body>
<input type="button" onclick="on()" value="Test1">
<input type="button" value="Test2" id="Test2">
</body>
<script>
// 第一种
function on() {
console.log("Test1被点击了");
}
// 第二种
document.getElementById("Test2").onclick = function(){
console.log("Test2被点击了");
}
</script>
常用事件
<body onload="fun_onload()">
<form action="" method="get" onsubmit="fun_onsub()">
<input type="text" onblur="fun_onblur()" onfocus="fun_onfocus()" onkeydown="fun_onKeyD()">
<input type="submit" value="提交">
<input type="button" value="单击事件" onclick="fun_onclick()">
</form>
<table onmouseover="fun_onMOver()" onmouseout="fun_onMOut()">
<tr>
<th>学号</th>
<th>姓名</th>
<th>分数</th>
<th>评语</th>
</tr>
<tr>
<td>001</td>
<td>张三</td>
<td>90</td>
<td>优秀</td>
</tr>
<tr>
<td>002</td>
<td>李四</td>
<td>88</td>
<td>很优秀</td>
</tr>
</table>
</body>
<script>
function fun_onclick() {
console.log("按钮被单击了");
}
function fun_onblur() {
console.log("输入框失去焦点");
}
function fun_onfocus() {
console.log("输入框获得焦点");
}
function fun_onload() {
console.log("页面完成加载");
}
function fun_onsub() {
alert("表单提交")
}
function fun_onKeyD() {
console.log("按下键盘");
}
function fun_onMOver() {
console.log("鼠标移到表格");
}
function fun_onMOut() {
console.log("鼠标移出表格");
}
</script>
事件案例
<body>
<img src="img/off.gif"> <br>
<input type="button" value="点亮" onclick="on()">
<input type="button" value="熄灭" onclick="off()"> <br>
<input type="text" onblur="Upper()" onfocus="Lower()"> <br>
<input type="checkbox" name="hobby">c++
<input type="checkbox" name="hobby">Java
<input type="checkbox" name="hobby">Python <br>
<input type="button" value="全选" onclick="ChkAll()">
<input type="button" value="全不选" onclick="UnChkAll()">
</body>
<script>
function on() {
var imgs = document.getElementsByTagName("img");
var img = imgs[0];
img.src = "img/on.gif";
}
function off() {
var imgs = document.getElementsByTagName("img");
var img = imgs[0];
img.src = "img/off.gif";
}
function Lower() {
var strs = document.getElementsByTagName("input");
var str = strs[2];
str.value = str.value.toLowerCase();
}
function Upper() {
var strs = document.getElementsByTagName("input");
var str = strs[2];
str.value = str.value.toUpperCase();
}
function ChkAll() {
var hobbes = document.getElementsByName("hobby");
for (let i = 0; i < hobbes.length; i++) {
const hobby = hobbes[i];
hobby.checked = true;
}
}
function UnChkAll() {
var hobbes = document.getElementsByName("hobby");
for (let i = 0; i < hobbes.length; i++) {
const hobby = hobbes[i];
hobby.checked = false;
}
}
</script>
参考
黑马程序员. JavaWeb开发教程