JavaScript
JavaScript与Java的关系
不要误会,可能有许多人会猜测 JavaScript 和 Java 是同一批人出的吧。但实际是两者没有任何关联,实际上是当时 Java 很火,然后 JavaScript 去蹭了波热点。
JavaScript的引入方式
在 Script 标签里写
<script> 在这里写你的JS代码 </script>
引入额外的JS文件
<script src="myscript.js"></script>
声明变量
- avaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
- 声明变量使用 var 变量名; 的格式来进行声明
- ES6新增了let命令,用于声明变量。其用法类似于var,但是所声明的变量只在let命令所在的代码块内有效。
- 使用 const 来声明常亮
JavaScript数据类型
JavaScript 是弱类型语言 声明变量时不需要特定声明他的数据类型
数值类型(Number)
JavaScript不区分整型和浮点型,就只有一种数字类型。
var a = 12.34; var b = 20;
将字符串类型数值转为数值类型
parseInt("123") // 返回123 parseInt("ABC") // 返回NaN,NaN属性是代表非数字值的特殊值。 parseFloat("123.456") // 返回123.456
字符串(String)
var a = "Hello" var b = "world; var c = a + b;
常用方法:
方法 | 说明 |
---|---|
.length | 返回长度 |
.trim() | 移除空白 |
.trimLeft() | 移除左边的空白 |
.trimRight() | 移除右边的空白 |
.charAt() | 返回指定位置字符 |
.concat() | 字符串拼接 |
.indexOf() | 子序列位置 |
.substring() | 根据索引获取子序列 |
.slice() | 切片 |
.toLowerCase() | 小写 |
.toUpperCase() | 大写 |
.split() | 分割 |
布尔值(Boolean)
var a = true; var b = false;
""(空字符串)、0、null、undefined、NaN都是false
对象(Object)
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
对象只是带有属性和方法的特殊数据类型。
数组
数组对象的作用是:使用单独的变量名来存储一系列的值。
var a = [123, "ABC"];
常用方法:
方法 | 说明 |
---|---|
.length | 数组的大小 |
.push() | 尾部追加元素 |
.pop() | 获取尾部的元素,并删除 |
.unshift() | 头部插入元素 |
.shift() | 头部移除元素 |
.slice() | 切片 |
.reverse() | 反转 |
.join() | 将数组元素以字符串间隔连接成字符串 |
.concat() | 数组拼接 |
.sort() | 排序 |
.forEach() | 将数组的每个元素传递给回调函数 |
.splice() | 删除元素,并向数组添加新元素。 |
.map() | 返回一个数组元素调用函数处理后的值的新数组 |
运算符
算数运算符
+(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)
比较运算符
>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=(不等于)、==(等于)、===(全等)、!==(不全等)
逻辑运算符
&&(与)、||(或)、!(非)
赋值运算符
=、+=、-=、*=、/=
流程控制
if-else
var a = 10; if (a > 5){ console.log("yes"); }else { console.log("no"); }
if-else if-else
var a = 10; if (a > 5){ console.log("a > 5"); }else if (a < 5){ console.log("a < 5"); }else { console.log("a = 5"); }
switch
var day = new Date().getDay(); switch (day) { case 0: console.log("Sunday"); break; case 1: console.log("Monday"); break; default: console.log("...") }
for
for (var i=0; i<10; i++) { console.log(i); }
while
var i = 0; while (i < 10) { console.log(i); i++; }
三元运算
var a = 1; var b = 2; var c = a > b ? a : b /* a > b成立执行?后的语句,不成立执行:后的语句 */ var a = 10, b = 20; var x = a > b?a:(b=="20")?a:b;
函数
使用 function 关键字定义
function func(){ 函数体 }; // 带参函数 function func1(a, b){ // 调用函数时按照必须参数传递,多余参数舍弃 console.log(a, b); return [a, b]; // 多个参数使用数组的形式返回 }; // 接收对于的参数 function func2(a, ...b){ // 使用三个点可以用来接收多余的参数 console.log(a, b); console.log(a, arguments[0]) // 类似于Array并接收所有的参数只能查看有几个元素和使用位置取值 } // 匿名函数 (function (a, b){ console.log(a, b); })(1, 2); // 立即执行函数内容 // ES6还可以使用 => 的形式定义函数 var func3 = (a, b) => a + b; // 等同于 function func3(a, b){ return a+b; }
内置对象
Date对象
// 方法1:不指定参数 var d1 = new Date(); // 方法2:参数为日期字符串 var d2 = new Date("2004/3/20 11:12"); // 方法3:参数为毫秒数 var d3 = new Date(5000); // 方法4:参数为年月日小时分钟秒毫秒 var d4 = new Date(2004,2,20,11,12,0,300);
Date对象方法
方法 | 描述 |
---|---|
getDate | 获取日 |
getDay | 获取星期几(从0~6代表从周日(0)到周六(6)) |
getMonth | 获取月份,月份从0开始 |
getFullYear | 获取年份 |
getYear | 获取从1900年到现在的年数 |
getHours | 获取小时 |
getMinutes | 获取分钟 |
getSeconds | 获取秒 |
getMilliseconds | 获取毫秒 |
getTime | 获取从1970年到现在的毫秒数 |
JSON对象
var str1 = '{"name": "Gredae", "age": 18}'; var obj1 = {"name": "Gredae", "age": 18}; // JSON字符串转换成对象 var obj = JSON.parse(str1); // 对象转换成JSON字符串 var str = JSON.stringify(obj1);
RegExp对象
// 定义正则表达式两种方式 var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; // 注意事项,正则表达式中不能有空格 // 正则校验数据 reg1.test('json666') // 全局匹配 var s1 = 'asdjfa'; s1.match(/s/) s1.match(/s/g) var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g reg2.test('asdjfa'); reg2.test('asdjfa'); reg2.lastIndex; /*第二个注意事项,全局匹配时有一个lastIndex属性*/ // 校验时不传参数 var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/ reg2.test(); // 不传递时默认传递一个undefined
Math对象
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
函数 | 描述 |
---|---|
abs() | 绝对值 |
exp() | 返回e的指数 |
floor() | 向下取整 |
log() | 返回自然数的对数 |
max() | 返回最大值 |
min() | 返回最小值 |
pow(x, y) | 返回x的y次幂 |
random() | 返回0~1的随机数 |
round() | 四舍五入最接近的数 |
sqrt() | 平方根 |
sin() | 正弦值 |
tan() | 正切值 |
BOM
BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。
windows对象
所有浏览器都支持 window 对象。
- window.innerHeight:浏览器窗口高度
- window.innerWidth:浏览器窗口宽度
- window.open():打开新窗口
- window.close():关闭当前窗口
window的子对象
navigator
- navigator.appName:Web浏览器全称
- navigator.appVersion:Web浏览器版本
- navigator.userAgent:Web浏览器的信息(一般防爬措施需要验证userAgent信息)
- navigator.platform:操作系统信息(信息不准确)
history对象
- history.forward():前进
- history.back():后退
location对象
- location.href:获取地址栏URL,设定值可以实现跳转功能
- location.reload:重新加载页面
弹出框
可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。
- 警告框:alert(123)
- 确认框:confirm("是否退出?")
- 提示框:prompt("请输入你的名字:")
计时器
setTimeout()
在一定时间间隔之后来执行代码或者函数
清除使用clearTimeout,需要指定计时器对象
setInterval()
在一定时间间隔之后反复来执行代码或者函数
清除使用clearInterval,需要指定计时器对象
DOM
DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。
DOM标准规定HTML文档中的每个成分都是一个节点(node):
- 文档节点(document对象):代表整个文档
- 元素节点(element 对象):代表一个元素(标签)
- 文本节点(text对象):代表元素(标签)中的文本
- 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
- 注释是注释节点(comment对象)
获取节点对象
- getElementById 根据ID获取标签
- getElementsByClassName 根据class属性获取标签对象
- getElementsByTagName 根据标签名称合集
间接获取节点对象
- parentElement 父节点标签元素
- children 所有子标签
- firstElementChild 第一个子标签元素
- lastElementChild 最后一个标签元素
- nextElementSibling 下一个兄弟标签元素
- previousElementSibling 上一个兄弟标签元素
创建节点对象:createElement
var divEle = document.createElement("div");
添加子节点
为节点添加子节点
var imgEle = document.createElement("img"); imgEle.setAttribute("src", "1.jpg"); // 为节点添加属性 var divEle = document.getElementById("div"); divEle.appendChild(imgEle); // 添加为其后代节点 divEle.insertBefore(imgEle, divEle.childNodes[0]) // 在子节点前面添加子节点
删除子节点
为节点删除子节点
var divEle = document.getElementById("div"); divEle.removeChild(divEle.childNodes[2]); // 删除节点下的子节点
替换子节点
为节点替换子节点
var new_text = document.createTextNode("这是新的标签!"); var divEle = document.getElementById("div"); divEle.replaceChild(new_text, divEle.childNodes[2]);
属性节点
获取文本节点的值
var divEle = document.getElementById("div"); var Text = divEle.innerText; var Html = divEle.innerHTML;
设置文本节点的值
var divEle = document.getElementById("div"); divEle.innerText="1"; divEle.innerHTML="<p>2</p>";
属性
var divEle = document.getElementById("div"); divEle.setAttribute("age","18"); // 设置属性 divEle.getAttribute("age"); // 获取属性 divEle.removeAttribute("age"); // 删除属性
取值
适用于以下标签:
input
select
textarea
var lEle = document.getElementById("li"); console.log(lEle.value); var sEle = document.getElementById("op"); console.log(sEle.value); var tEle = document.getElementById("text"); console.log(tEle.value);
class操作
className // 获取所有样式类名(字符串) classList.remove(cls) // 删除指定类 classList.add(cls) 添加类 classList.contains(cls) // 存在返回true,否则返回false classList.toggle(cls) // 存在就删除,否则添加
样式操作
var pEle = document.getElementById("p"); pEle.style.backgroundColor="red";
事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript
常用事件 | 描述 |
---|---|
onclick() | 当元素被单击触发 |
ondblclick() | 当元素被双击触发 |
onfocus() | 当元素获取焦点 |
onblur() | 当元素失去焦点 |
onchange() | 当域内容被改变 |
onload() | 当页面内容加载完毕 |
onkeydown() | 当键盘按下 |
onkeyup() | 当键盘松开 |
onkeypress() | 当键盘按下并松开 |
onmouserdown() | 当鼠标按下 |
onmousemove() | 当鼠标被移动 |
onmouseout() | 当鼠标从元素移开 |
onmouseover() | 当鼠标移动到元素上 |
onselect() | 当用户选中文本 |
onsubmit() | 当表单被提交 |
绑定方式
方式一:
<script> function changeColor(his){ his.style.backgroundColor="green"; } </script> <div id="d1" onclick="changeColor(this);">点我</div>
方式二:
<div id="div">点我</div> <script> var divEle = document.getElementById("div"); divEle.onclick=function () { divEle.innerText="呵呵"; } </script>