前端(三)-JavaScript
1、基本语法
1.1 引入JavaScript
1.1.1行内引入
<input type="button" value="轻轻点我一下" onclick="javascript:alert('正在学习Javascript!')">
1.1.2 内部引入
<script type="text/javascript">
function testClickTwo(){
alert("正在学习JavaScriptTwo")
}
</script>
<input type="button" value="轻轻点我一下Two" onclick="testClickTwo()">
1.1.3 外部引入
<!-- 引入外部js脚本文件 -->
<script src="js/test.js" type="text/javascript"></script>
1.2 数据类型和变量
typeof
查看数据类型;
关键字 | 类型 |
---|---|
undefined | 未定义 |
number | 数字 |
string | 字符串 |
boolean | 布尔 |
number 的注意点
- NaN; NaN表示Not a Number,当无法计算结果时用NaN表示 ;
- Infinity; Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就 表示为Infinity;
1.3 strict模式
JavaScript在设计之初,为了方便初学者学习,并不强制要求用 var 申明变量。这个设计错误带来了 严重的后果:如果一个变量没有通过 var 申明就被使用,那么该变量就自动被申明为全局变量;
为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的 JavaScript代码,强制通过 var 申明变量,未使用 var 申明变量就使用的,将导致运行错误。
<!--启用strict模式的方法是在JavaScript代码的第一行写上:-->
<script>
`use strict`;
// 如果浏览器支持strict模式,下面的代码将报ReferenceError错误:
abc = 'Hello, world'; //没有使用var声明变量
console.log(abc);
</script>
1.4 字符串
1.4.1 多行字符串
由于多行字符串用 \n 写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反 引号 ``表示:
`这是一个
多行
字符串`;
1.4.2 模板字符串(注意模板字符的放多行字符串号``反引号里面才可以)
ES6新增了一种模板字符串,表示方法和上面的多行 字符串一样,但是它会自动替换字符串中的变量:
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
1.4.3 常用方法
方法 | 说明 |
---|---|
length() | 字符串长度 |
str[index] | 通过下标获取字符 |
toUpperCase() | 变大写 |
toLowerCase() | 变小写 |
charAt(index) | 返回指定下标的字符 |
indexOf(str) | 返回指定字符串的下标 |
lastIndexOf(str) | 返回指定字符串最后一次出现的下标 |
substring(index1,index2) | 返回区间的字符(前闭后开) |
... | ... |
1.5 数组
JavaScript的 Array 可以包含任意数据类型,并通过索引来访问每个元素。
1.5.1 初始化
//定义数组1:var 数组名 =new Array([长度]),长度可以省略
var varArray1 = new Array();
//访问数组元素
varArray1[0] = "LPL";
varArray1[1] = "LCK";
varArray1[3] = "LEL";
console.log(varArray1);
//定义数组2,支持直接初始化
var varArray2 = new Array(10,20,30,40,50);
varArray2[5] = 60;
console.log(varArray2);
//定义数组3:直接支持使用中括号
var varArray3 = [100,90,80];
console.log(varArray3);
1.5.2 常用方法
方法 | 说明 |
---|---|
indexOf(index) | 通过下标获取元素 |
slice(index1,index2) | 截取指定下标元素,返回新数组(前闭后开) |
push(元素...) | 向末尾添加任意元素 |
pop() | 将末尾的元素删除 |
unshift(元素...) | 向头部添加任意元素 |
shift() | 将头部的元素删除 |
sort() | 排序 |
reverse() | 反转 |
splice(index,num,元素...) | 从指定的索引开始删除若干元素,然后再 从该位置添加若干元素 |
concat(array) | 把当前的 Array 和另一个 Array 连接起来,并返回一个新的 Array |
join([符号]) | 把当前 Array 的每个元素都用指定的字符串连接起 来,然后返回连接后的字符串: |
1.6 对象
JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。
1.6.1 定义一个对象
var 对象名 = {
key: 'value',
key: 'value',
key: 'value'
}
1.6.2 获取对象的属性
对象.属性
1.6.3 由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错
如果我们要检测对象是否拥有某一属性,可以用 in 操作符:
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
不过要小心,如果用 in 判断一个属性存在,这个属性不一定是 这个对象的,它可能是这个对象继承得 到的:
1 'toString' in xiaoming; // true
//因为 toString 定义在 object 对象中,而所有对象最终都会在原型链上指向 object,所以xiaoming 也拥有 toString 属性。
要判断一个属性是否是 xiaoming 自身拥有的,而不是继承得到的,可以用 hasOwnProperty() 方法:
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
1.7 流程控制
1.7.1 if
1.7.2 for
for ... in , 它可以把一个对象的所有属性依次循环出来:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); // 'name', 'age', 'city'
}
}
由于 **Array 也是对象**,而它的每个元素的**索引被视为对象的属性**,所以**遍历出来是下标**;
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2'
console.log(a[i]); // 'A', 'B', 'C'
}
//请注意,for... in 对 Array 的循环得到的是 String 而不是 Number 。
1.7.3 while
1.8 Map 和Set
1.8.1 Map
Map 是一组键值对的结构,具有极快的查找速度。
1.8.1.1初始化
//初始化 Map 需要一个二维数组,或者直接初始化一个空 Map;
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
//由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
1.8.2 Set
Set 和 Map 类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在 Set 中, 没有重复的key;
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3,3,'3']); // 含1, 2, 3,'3'
//重复元素在 Set 中自动被过滤:3
//通过 delete(key) 方法可以删除元素:
1.9 Iterable
遍历 Array 可以采用下标循环,遍历Map 和 Set 就无法使用下标。 为了统一集合类型,ES6标准引入了新的 iterable 类型,Array,Map,Set 属于; 具有 iterable 类型的集合可以通过新的 for ... of 循环来遍历。
更好的方式是直接使用 iterable 内置的 forEach 方法,它接收一个函数,每次迭代就自动回调该 函数。
1.9.1 Array
var a = new Array(元素...);
a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
})
1.9.2 Map
Map 的回调函数参数依次为 value 、 key 和 map 本身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
1.9.3 set
Set 没有索引,因此回调函数的前两个参数都是元素本身:
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
2、交互弹窗
方法 | 说明 |
---|---|
alert(str) | 警告弹窗,没有返回值,只有确定按钮 |
prompt(str) | 有输入框(返回值为输入内容,直接取消返回值为空null,没有输入但确认返回值为空字符串) |
prompt(str1,str2) | 有输入框和默认值 |
confirm(str) | 是否选择框(返回值,true,false) |
3、函数
3.1 常用系统函数
方法 | 说明 |
---|---|
parseInt(strNum) | 将字符串转换为整型数字 |
parseFloat(strNum) | 将字符串转换为浮点型数字 |
isNaN(值) | true,表示不是数字,false,表示是数字 |
3.2 自定义函数
3.2.1定义函数
方式1
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
//一旦执行到 return 时,函数就执行完毕,并将结果返回。
//如果没有 return 语句,函数执行完毕后也会返回结果,只是结果为 undefined 。
方式2
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
//在这种方式下, function (x) { ... } 是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量 abs ,所以,通过变量 abs 就可以调用该函数。
//上述两种定义完全等价,注意第二种方式按照完整语法需要在函数体末尾加一个 ; ,表示赋值语句结束。
3.3两个重要点
3.3.1arguments 关键字
JavaScript还有一个免费赠送的关键字 arguments ,它只在函数内部起作用,并且永远指向当前函数 的调用者传入的所有参数。
function foo(x) {
console.log('x = ' + x); // 10
for (var i=0; i<arguments.length; i++) {
console.log('arg ' + i + ' = ' + arguments[i]); // 10, 20, 30
}
}
foo(10, 20, 30)
3.3.2 rest 参数
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
foo(1);
// 结果:
// a = 1
// b = undefined
// Array []
rest参数只能写在最后,前面用 ... 标识,从运行结果可知,传入的参数先绑定 a 、 b ,多余的 参数以数组形式交给变量 rest ;
3.4 变量的作用域
描述 | 作用域 |
---|---|
var声明的变量 | 全局变量 |
不用var声明的变量(不建议使用) | 全局变量 |
方法以内的变量 | 局部变量 |
3.4.1 两个关键字
关键字 | 说明 |
---|---|
let | 声明局部变量的关键字 |
const | 声明常量的关键字 |
3.4.2 全局对象
实际上,JavaScript默认有一个全局对象 window ,全 局作用域的变量实际上被绑定到 window 的一个属性:
4、事件
事件 | 说明 |
---|---|
onclick | 单机事件 |
onfocus | 获取焦点事件 |
onblur | 失去焦点事件 |
onkeydown | 键盘按下事件 |
onkeyup | 键盘抬起事件 |
onkeypress | 键盘产生可输入字符事件 |
onmouseover | 鼠标移入事件 |
onmouseout | 鼠标移除事件 |
5、BOM
5.1 windows
方法 | 说明 |
---|---|
close() | 关闭浏览器窗口 |
open() | 打开指定url浏览器窗口(可指定窗口大小) |
5.2 history
方法 | 说明 |
---|---|
back() | 返回上一个页面 |
forward() | 下一个页面 |
go() | 加载某个具体URL (go(-1)返回上一个页面 go(1)下一个页面) |
5.3 location
属性 | 说明 |
---|---|
host | 主机名+端口号 |
hostname | 主机名 |
href | 完整URL(给href赋值可以跳转到指定页面) |
方法 | 说明 |
---|---|
repload() | 重新加载文档 |
replace() | 用新的文档替换当前文档 |
5.4 document
属性 | 说明 |
---|---|
referrer | 返回载入前文档的URL |
URL | 返回当前文档的URL |
cookie | 返回当前页面的cookie |
方法 | 说明 |
---|---|
getElementById() | 返回对拥有指定id的第一个对象的引用 |
getElementByName() | 返回带有指定name值的对象集合 |
getElementByTagName() | 返回带有指定标签的对象的集合 |
getElementByClassName() | 返回带指定class值的对象集合 |
write() | 向文档写文本,HTML表达式或JavaScript代码 |
5.5 innerHTML 与 innerText
方法() | 说明 |
---|---|
innerHTML = "" | 往节点里里面些内容,里面的标签会被解析 |
innerHTML | 获取节点里面的内容 |
innerText = "" | 往节点里里面些内容,里面的标签不会被解析 |
innerText | 获取节点里面的内容 |
toFixed(number) 保留指定位数
5.6 Date
方法 | 说明 |
---|---|
getDate() | 每月中的第几天 |
getDay() | 每周的第几天 |
getHours() | 小时 |
getMinutes() | 分钟 |
getSeconds() | 秒数 |
getMonth() | 月份(0~11) |
getFullYear() | 年份 |
getTime() | 时间戳 |
6.7 Math对象
方法 | 说明 |
---|---|
ceil() | 向上舍入 |
floor() | 向下舍入 |
rand() | 四舍五入 |
random() | 返回0~1之间的随机数 |
6.8 定时函数与清除函数(时钟特效)
定时函数
方法 | 说明 |
---|---|
setTimeout("调用的函数",等待的秒数) | 指定时间后执行一次函数 |
setInterval("调用的函数",间隔的秒数) | 指定时间间隔一直执行函数 |
清除函数
方法 | 说明 |
---|---|
clearTimeout(setTimeout返回的ID值) | 停止执行函数 |
clearInterval(setInterval返回的ID值) | 停止执行函数 |
6、DOM
6.1 层次关系访问节点
层次访问节点1,包含text,注释等其他内容;
属性名称 | 说明 |
---|---|
parentNode | 返回接待你的父节点 |
childNodes | 返回子节点集合,childNodes[i] |
firstChild | 返回节点的第一个子节点 |
lastChild | 返回节点的最后一个子节点 |
nextSibling | 下一个节点 |
previousSibling | 上一个节点 |
层次访问节点2,只包含标签元素节点
属性名称 | 说明 |
---|---|
firstElementChild | 返回节点的第一个子节点 |
lastElementChild | 返回节点的最后一个子节点 |
nextElementSibling | 下一个节点 |
previousElementSibling | 上一个节点 |
6.2 操作节点
6.2.1操作节点属性
方法 | 说明 |
---|---|
getAttribute("属性名") | 获得节点指定属性值 |
setAttribute("属性名",属性参数) | 设置节点的属性值 |
6.2.2创建和插入节点
方法 | 说明 |
---|---|
cerateElement(tagName) | 通过标签名创建新的元素节点 |
A.appendChild(B) | 把B节点(作为子节点)追加到A节点的末尾 |
inseretBefore(A,B) | 把A节点插入到B节点之前 |
cloneNode(deep) | 复制某个指定的节点 |
cloneNode(deep)的深拷贝和浅拷贝
方法 | 说明 |
---|---|
cloneNode(false) | 浅拷贝(不拷贝标签内部的子元素) |
cloneNode(true) | 深拷贝(包括标签内部的子元素一起拷贝) |
6.2.3 删除和替换节点
方法 | 说明 |
---|---|
removeChild(node) | 删除指定的节点 |
replaceChild(newNode,oldNode) | 用其他的节点替换指定的节点 |
注意
只有父节点才可以删除子节点或者替换子节点;
6.3 操作节点样式
6.3.1 事件
修改样式主要与事件一起使用;
事件 | 说明 |
---|---|
onclick | 单机事件 |
onfocus | 获取焦点事件 |
onblur | 失去焦点事件 |
onkeydown | 键盘按下事件 |
onkeyup | 键盘抬起事件 |
onkeypress | 键盘产生可输入字符事件 |
onmouseover | 鼠标移入事件 |
onmouseout | 鼠标移除事件 |
6.3.2 通过节点的style属性
元素节点.style.样式属性=”样式值“;
//举例
document.getElementById("cart").style.backgroundColor="#fff";
6.3.3 className属性
//carOut类属性时在CSS外部样式中已经存在的
document.getElementById("cart").className = "cartOut";
前端(三)-JavaScript的更多相关文章
- 第三篇:web之前端之JavaScript基础
前端之JavaScript基础 前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript ...
- 第三章、前端之JavaScript
目录 第三章.前端之JavaScript 一.javaScript的引入方式 二.JavaScript语言的规范 三.语言基础 变量声明 四.数据类型 五.流程控制 六.函数 函数的argument ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- 互联网公司前端初级Javascript面试题
互联网公司前端初级Javascript面试题 1.JavaScript是一门什么样的语言,它有哪些特点?(简述javascript语言的特点)JavaScript是一种基于对象(Object)和事件驱 ...
- 好程序员web前端分享javascript关联数组用法总结
好程序员web前端分享javascript关联数组用法总结,有需要的朋友可以参考下. Hash关联数组定义 代码如下 // 定义空数组 myhash = { } // 直接定义数组 myhash = ...
- 前端之JavaScript(二)
一.概述 本篇主要介绍JavaScript的BOM和DOM操作,在前端之JavaScript(一)中介绍了JavaScript基础知识 1.1.BOM和DOM BOM(Browser Object M ...
- 前端(3)JavaScript
前端(3)JavaScript JavaScript概述 1ECMAScript和JavaScript的关系: 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaS ...
- Ubuntu环境下使用npm编译从git上clone下来的前端(Javascript)项目
一.更新Ubuntu软件源 打开终端依次输入: $ sudo apt-get update $ sudo apt-get install -y python-software-properties s ...
- 前端06 /JavaScript之BOM、DOM
前端06 /JavaScript 目录 前端06 /JavaScript 昨日内容回顾 js的引入 js的编程要求 变量 输入输出 基础数据类型 number string boolean null ...
- 前端基础-JavaScript
转载地址:http://www.cnblogs.com/yuanchenqi/articles/6893904.html 一.Javascript结构 ECMAScript ECMAScript ...
随机推荐
- SSIS以yyyyMMdd的形式获取当前系统时间
公式: (DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT(" ...
- 借用Ultralytics Yolo快速训练一个物体检测器
借用Ultralytics Yolo快速训练一个物体检测器 同步发表于 https://www.codebonobo.tech/post/14 大约在16/17年, 深度学习刚刚流行时, Object ...
- 从0.1开始学java(2)
string串池 现在都在堆中 "=="号的比较 字符串比较一般调用equals或者equalsignoreCase API来比较(后者忽略大小写) StringBuilder 可 ...
- Robot_Parkour_Learning分享报告关键词记录
fraction noise minecraft perlin noise 作为一种fraction noise 跑酷 深度相机,不然被挡住不知道是要下蹲还是要跳过去 issacGym的激光雷达的模拟 ...
- NOIP2015 提高组 子串
NOIP2015 提高组 子串 感觉是最长公共子序列模型的变式. 容易想到记 \(f[i][j][k]\) 表示 \(A\) 走到了第 \(i\) 位,\(B\) 匹配上了 \(1 \sim j\), ...
- 实时数仓及olap可视化构建(基于mysql,将maxwell改成seatunnel可以快速达成异构数据源实时同步)
1. OLAP可视化实现(需要提前整合版本) Linux121 Linux122 Linux123 jupyter spark python3+SuperSet3.0 hive ClinckHouse ...
- base64编码图片二进制数据后直接保存在html文件中
相关内容: 在markdown编辑器中嵌入base64图片 看到一个帖子,那就是base64编码用来http服务中对二进制文件编码,那么可以不可以直接在html文件中使用base64编码后的字符串来表 ...
- Windows Terminal中使用GitBash
简要说明 我喜欢终端操作,喜欢Git,Microsoft出了一款工具叫做Windows Terminal,在Windows Terminal中使用Git的体验感是极佳的,本博客将教你如何让这体验舒服到 ...
- Vim基本使用指南
一般模式:移动光标的方法 h或 向左方向键(←)光标向左移动一个字符 j或 向下方向键(↓)光标向下移动一个字符 k或 向上方向键(↑)光标向上移动一个字符 l或 向右方向键(→)光标向右移动一个字符 ...
- PHPstorm配置webserver
phpstorm自带了一个web server,我们可以直接在IDE中直接运行调试代码,非常方便. 配置interpreter 工程第一次运行还要配置一下php的解释器,我电脑的配置如下: 可以看到代 ...