文章目录
JS
概念:
- JavaScript 是一种轻量级的编程语言
- 轻量级:
js
- 重量级:
Java
,C++
,C#
- 轻量级:
- JavaScript 是可插入 HTML 页面的编程代码
- JavaScript是一种弱类型语言
- 比如Java就是强类型,所有变量定义都需要明确的类型定义
- 主要用来向HTML页面添加交互行为
HTML、CSS、JS的关系:
- HTML主要负责页面的搭建
- 比如页面上文字的展示,图片,输入框等元素
- CSS主要负责页面的美化
- 比如文字的大小调整,图片大小,各种样式
- JS主要负责页面的交互
- 比如点击一个按钮后弹框等
在HTML中引入JS的方式
方式一:内部引入
- 在html页面中, 用一个
script
标签包裹,直接写js代码 - 可以在head标签内部,也可以在body内部,也可以在body后
- 一般是在body标签的结尾前
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
这是div
</div>
<!--可以在页面的任意地方去写script标签
一般放在body结束的前面
-->
<script>
alert("123")
</script>
</body>
</html>
方式二:外部引入
-
创建
js文件
,在html页面上引入js文件 -
在head标签内部,添加script标签
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js_test.js"></script>
</head>
<body>
</body>
</html>
js的变量
变量声明
JavaScript在声明时统一使用无类型(untyped)的"var
"关键字
- var来声明一个变量,这是一个固定的写法,是js的语法
- JavaScript并没有避开数据类型,它的数据类型是根据所赋值的类型来确定的
- JavaScript 变量区分大小写
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// 直接使用var来定义变量
var num = 123;
/* 语法比较松散*/
// 可以对定义好的变量进行重新赋值
num = "helloworld"
alert(num)
</script>
</body>
</html>
命名规范:保持跟Java一致
变量类型
- String
- Number
- Boolean
- 数组
var cars=["hello", "hi", "nihao"];
- 对象
var person={firstname:"Bill", lastname:"Gates", id:5566};
不要使用变量类型,了解即可
JS中的方法
js中方法的定义:
function 方法名(){
// 方法体
}
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- onclick = js方法名()-->
<button onclick="deleteNum()">按钮</button>
<button onclick="deleteNum1(111)">按钮</button>
<!-- 要注意html里面的元素,怎么和js联动-->
<script>
function deleteNum(){
alert(123);
}
/*可以传递参数,参数不用var去接,直接写变量名即可*/
function deleteNum1(num){
alert(num);
}
</script>
</body>
</html>
运算符
算数运算符
+, -, *, /, %, ++, --
=, +=, -=, *=, /=, %=
与Java之间的差异:
对待减法,如果是字符串 - 数字,会首先尝试将字符串转换为数字,然后计算。如果转化失败,会返回NaN。
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var str = "15";
var num = 5;
// 字符串和普通数字做加法,其实是做了一个拼接
console.log(str + num);
// 首先把str尝试转成数字
// 如果没转成功,则会返回一个NaN
// 任何数字和NaN计算都是NaN
console.log(str - num);
var str = "str";
console.log(str - num);
</script>
</body>
</html>
逻辑运算符
> , <, >=, <=, ? : 三元
&& , ||, !
==, ===, !=, !==
注:
==
: 只判断值是否相等===
: 不仅仅判断值, 还要判断类型!=
: 只判断值是否不相等!==
: 不仅仅判断值, 还要判断类型
逻辑分支语句
if
- 在js中很多东西都可以充当
if-else
的条件 - 但是有些东西默认表现为假: 0, 空字符串, null, NaN, false, undefined
break 语句用于跳出循环。
continue 用于跳过循环中的一个迭代。
for
一般我们使用普通的fori循环用来遍历数组, 一般我们使用foreach循环遍历对象
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var object = {name: "Jack", age: 25, address: "China"};
for(var obj in object){
console.log(obj + " ---- " + object[obj]);
}
var array = [1, 2, "hello", false];
for (let i = 0; i < array.length; i++) {
console.log(array[i]);
}
</script>
</body>
</html>
核心对象/类型
Number
-
toString()
以字符串返回数值 -
toFixed()
返回字符串值,它包含了指定位数小数的数字(四舍五入) -
toPrecision()
返回字符串值,它包含了指定长度的数字 -
parseInt()
允许空格。只返回首个数字
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var num = 12345678;
var smallNum = 3.1415;
console.log(num.toString()); // 12345678
console.log(smallNum.toFixed(3)); // 3.142
console.log(smallNum.toPrecision(3)); // 3.14
console.log(parseInt(1234)); // 1234
</script>
</body>
</html>
String
-
length
:属性返回字符串的长度 -
indexOf()
:返回字符串中指定文本首次出现的索引(位置)-
不存在返回-1
-
// 头一个China返回的下标 str.indexOf("China"); // 从28开始,找往后的China的下标 str.indexOf("China", 28);
-
-
slice()
:提取字符串的某个部分并在新字符串中返回被提取的部分 -
split()
:将字符串转换为数组
Array
toString()
返回数组转换的数组值(逗号分隔)的字符串。pop()
方法从数组中删除最后一个元素,返回删除的元素push()
方法(在数组结尾处)向数组添加一个新的元素,返回数组长度splice()
- 删除指定位置开始的指定个元素。
fruits.splice(2, 2);
- 方法可用于向数组添加新项, 返回([])。
fruits.splice(2, 0, "Lemon", "Kiwi");
- 删除指定位置开始的指定个元素。
sort()
方法以字母顺序对数组进行排序,返回值和原数组是经过排序的数组reverse()
方法反转数组中的元素。返回值和原数组都变为经过反转数组
eg:
// toString() 返回数组转换的数组值(逗号分隔)的字符串。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.toString()); //Banana,Orange,Apple,Mango
// pop() 方法从数组中删除最后一个元素,返回删除的元素
fruits.pop(); // 从 fruits 删除最后一个元素("Mango")
var x = fruits.pop(); // x 的值是 "Mango"
// push() 方法(在数组结尾处)向数组添加一个新的元素,返回数组长度
fruits.push("Kiwi"); // 向 fruits 添加一个新元素
// splice() 方法可用于向数组添加新项, 返回([])
fruits.splice(2, 0, "Lemon", "Kiwi");
// 第一个参数:添加新元素的起始位置。第二个参数:定义应删除多少元素。
// 其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。
// sort() 方法以字母顺序对数组进行排序,返回值和原数组是经过排序的数组
fruits.sort(); // 对 fruits 中的元素进行排序
// reverse() 方法反转数组中的元素。返回值和原数组都变为经过反转数组
fruits.reverse(); // 对 fruits 中的元素进行排序
Math
-
Math.ceil(x)
返回大于等于x的最小整数 -
Math.floor(x)
返回小于等于x的最大整数 -
Math.random()
返回 0 ~ 1 之间的随机数 -
Math.round(x)
把一个数四舍五入为最接近的整数 -
Math.max(x,y,z,...,n)
返回最高值 -
Math.min(x,y,z,...,n)
返回最低值
DOM
文档对象模型(Document Object Model,简称DOM)
-
DOM的加载顺序: 指的就是浏览器获得了一份html代码之后, 从获得代码到显示的过程
-
解析HTML结构(从上向下的过程),一边解析, 一边构建dom树结点/节点
- 加载外部脚本和样式表文件,异步加载外部的css和js文件
- 解析并执行脚本代码
eg:
在DOM树中获取结点
getElementById()
:根据id获取一个结点getElementsByName()
:根据name属性, 获取所有对应name结点的集合getElementsByTagName()
:根据标签名, 获取所有对应标签结点的集合
其中:
getElementById()
返回的是一个节点getElementsByName(),getElementsByTagName()
返回的是一个集合
eg:
<div id="div1">
div1
</div>
<div id="div2" name="div2222">
div2
</div>
<script>
// element是指定的id 的div块
let element = document.getElementById("div1");
console.log(element)
// 获取的是一个集合。 获取了两个div块
let elementsByTagName = document.getElementsByTagName("div");
console.log(elementsByTagName[0])
console.log(elementsByTagName[1])
// 获取的是一个div集合,只有一个 是div2
let elementsByName = document.getElementsByName("div2222");
console.log(elementsByName)
</script>
在DOM树中添加结点
appendChild
: 给某个结点添加一个孩子(孩子也应该是一个结点。注意类型 )- 比如:
- 要添加一个
li
类型的节点,需要使用以下方式:document.createElement("li")
- 要添加文本类型的节点:
document.createTextNode("zs")
- 要添加一个
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul id = "ul_1">
<li>water</li>
<li>coke</li>
<li>juice</li>
<li>milk</li>
</ul>
<input id = "input_1">
<button onclick="addElem()">添加元素</button>
</body>
<script>
function addElem(){
var inputNode = document.getElementById("input_1")
var inputStr = inputNode.value
var ulNode = document.getElementById("ul_1")
// 创建一个文本结点
var textNode = document.createTextNode(inputStr)
// 创建一个li类型的结点对象
// document.createElement创建一个指定类型的结点
var liNode = document.createElement("li")
liNode.appendChild(textNode)
// appendChild 给某个结点添加孩子
// 参数是一个孩子'结点'
ulNode.appendChild(liNode)
inputNode.value = ""
}
</script>
</html>
在DOM树中删除结点
-
removeChild
: 给某个结点删除其一个孩子(注意:参数是要删除的孩子 ) -
注意输入的参数,是一个
children
类型的
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul id = "ul_1">
<li>water</li>
<li>coke</li>
<li>juice</li>
<li>milk</li>
</ul>
添加元素的名称:<input id = "input_1">
<button onclick="addElem()">添加元素</button>
<br>
删除元素的下标:<input id="inputstr">
<button onclick="deleteli()">删除元素</button>
</body>
<script>
function addElem(){
var inputNode = document.getElementById("input_1")
var inputStr = inputNode.value
var ulNode = document.getElementById("ul_1")
// 创建一个文本结点
var textNode = document.createTextNode(inputStr)
// 创建一个li类型的结点对象
// document.createElement创建一个指定类型的结点
var liNode = document.createElement("li")
liNode.appendChild(textNode)
// appendChild 给某个结点添加孩子
// 参数是一个孩子'结点'
ulNode.appendChild(liNode)
inputNode.value = ""
}
function deleteli(){
var index = document.getElementById("inputstr").value
var ulNode = document.getElementById("ul_1")
// childNodes: 专门用来获得一个结点的所有孩子
var childNodes = ulNode.childNodes;
// removeChild: 给某个结点删除其一个孩子
// 参数要删除的孩子
ulNode.removeChild(childNodes[index])
}
</script>
</html>
在DOM树中修改结点
-
replaceChild
: 给某个结点替换孩子结点 -
第一个参数: 新孩子;第二个参数: 旧孩子
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul id = "ul_1">
<li>water</li>
<li>coke</li>
<li>juice</li>
<li>milk</li>
</ul>
添加元素的名称:<input id = "input_1">
<button onclick="addElem()">添加元素</button>
<br>
删除元素的下标:<input id="inputstr">
<button onclick="deleteli()">删除元素</button>
<br>
修改元素的下标: <input id="inputtag">
替换内容: <input id="inputstrNew">
<button onclick="changeli()">替换</button>
</body>
<script>
function addElem(){
var inputNode = document.getElementById("input_1")
var inputStr = inputNode.value
var ulNode = document.getElementById("ul_1")
// 创建一个文本结点
var textNode = document.createTextNode(inputStr)
// 创建一个li类型的结点对象
// document.createElement创建一个指定类型的结点
var liNode = document.createElement("li")
liNode.appendChild(textNode)
// appendChild 给某个结点添加孩子
// 参数是一个孩子'结点'
ulNode.appendChild(liNode)
inputNode.value = ""
}
function deleteli(){
var index = document.getElementById("inputstr").value
var ulNode = document.getElementById("ul_1")
// childNodes: 专门用来获得一个结点的所有孩子
var childNodes = ulNode.childNodes;
// removeChild: 给某个结点删除其一个孩子
// 参数要删除的孩子
ulNode.removeChild(childNodes[index])
}
function changeli() {
var inputTag = document.getElementById("inputtag").value
var inputStr = document.getElementById("inputstrNew").value
var ulNode = document.getElementById("ul_1")
var childNodes = ulNode.childNodes;
var changeNode = childNodes[inputTag]
// console.log(changeNode)
// replaceChild: 给某个结点替换孩子结点
// 第一个参数: 新孩子
// 第二个参数: 旧孩子
changeNode.replaceChild(document.createTextNode(inputStr), changeNode.childNodes[0])
}
</script>
</html>
inner
-
innerText
: 会按照text全部放入 -
innerHTML
: 会按照html解析。比如一些标签等