文章目录
- JS简介
- JS是什么
- JS的用途
- JS的构成
- 变量
- 声明和定义
- 变量规范
- 数据类型
- 基本数据类型
- 引用数据类型
- 运算符
- 赋值运算符
- 算数运算符
- 比较运算符
- 特殊
- 字符串拼接
- 数据类型转换
- 转成字符串
- 字符串转成数字类型
- 任意类型转成boolean
- 序列化
- 流程控制
- if 判断
- 逻辑与 & 逻辑或
- switch
- while
- do_while
- for
- 常用内置对象
- Array - 数组
- 数组的创建
- 数组的赋值
- 常用方法
- String - 字符串
- Date - 日期
- Math - 内置对象
- 函数和Object
- 函数的声明和调用
- 声明方式1
- 声明方式2
- 声明方式3
- 调用
- 入口函数
- 创建对象的几种常用方式
- 使用object创建对象
- 使用字面量创建对象
- 工厂模式创建对象
- 构造函数模式创建对象
- 原型模式创建对象
- 定时器
- 执行一次
- 周期执行
- 正则
- DOM
- 获取DOM节点的方法
- 常用的DOM节点
- 节点的增删改查
- 在html页面中增加标签
- 设置属性
- id
- 类名
- 标签属性
- 获取内容
- 获取元素内所有内容
- 获取元素节点的标签名
- 获取文本
- 获取标签属性
- 删除
- 删除属性
- 删除对象
- 复制
- 替换
- 注意
- BOM
JS简介
JS是什么
基于对象(object)和事件驱动(Event Driven)的, 安全性好的脚本语言
运行在客户端减轻服务器负担
特点
向html中添加交互行为
弱语言类型
一般用来编写客户端脚本
解释型语言, 无需另外编译
JS的用途
实现页面交互, 实现页面特效. 即js操作html的dom结构或操作样式
表单验证. 即在提交服务器前检查, 减轻服务器压力
JS的构成
DOM, BOM
变量
声明和定义
- 先声明后定义
var name;
name = 'yky';
console.log(name)
- 声明立刻定义
var name = 'yky';
console.log(name)
变量规范
1. 命名规则同python
2. 推荐驼峰命名
数据类型
基本数据类型
- number
var num = 123;
console.log(typeof num);
// typeof [变量名] 用来检查变量类型
- string
var str = '123';
console.log(typeof str);
- boolean
var bool = True;
console.log(typeof bool);
- null
var n = null;
console.log(typeof n);
- undefined
var a; // 仅声明, 未定义
console.log(typeof a);
引用数据类型
- function
- object
- array
- string
- date
运算符
赋值运算符
运算符 | 举例 |
= | a=1 |
算数运算符
var a = 5, b = 2
var c
运算符 | 举例 | 相当于 | 结果 |
= | a=b | a=2 | |
+ | c=a+b | c=7 | |
- | c=a-b | c=3 | |
* | c=a*b | c=10 | |
/ | c=a/b | c=2 | |
% | c=a%b | c=1 | |
++ | a++ | a=a+1 | a=6 |
– | a– | a=a-1 | a=4 |
+= | a+=b | a=a+b | a=7 |
-= | a-=b | a=a-b | a=3 |
*= | a*=b | a=a*b | a=10 |
/= | a/=b | a=a/b | a=2 |
%= | a%=b | a=a%b | a=1 |
比较运算符
运算符 | 描述 | 结果 |
== | 等于, 比数值 | |
=== | 等同于, 比数值和类型 | |
!= | 不等于 | |
!== | 不等同于 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
特殊
字符串拼接
1. 只能进行拼接, 不能进行运算
2. 只能+, 不支持*
var a = 'aa';
var b = 'bb';
var c = 3;
var d = a+b;
var e = a*c;
console.log(d)
console.log(e)
数据类型转换
转成字符串
- String()
var a = 123;
var b = String(a);
console.log(typeof b)
- toString()
var a = 123;
var b = a.toString();
console.log(typeof b)
字符串转成数字类型
- Number()
var a = '33';
var b = Number(a);
console.log(b)
- parseInt()
从字符串开头第一位寻找, 直到找到非数字. 若第一位不为数字, 返回NaN
var a = '33aa3';
var b = parseInt(a);
console.log(b)
任意类型转成boolean
非0即真
序列化
var o1 = {"name": "Tim", "age": 9000}
var s1 = JSON.stringify(o1)
typeof(s1)
var o2 = JSON.parse(s1)
typeof(o2)
流程控制
if 判断
var score = 90;
if(score >= 90){
//执行操作
console.log('优秀')
}else if(60 <= score < 90){
//执行操作
console.log('合格')
}else{
//执行操作
console.log('不合格')
}
逻辑与 & 逻辑或
var chinese_score = 90;
var math_score = 90;
// 如果有一个小于60 则判定重考
if(chinese_score < 60 || math_score < 60){
console.log('重考')
}
// 如果两个都小于60 则判定重修
if(chinese_score < 60 && math_score < 60){
console.log('重修')
}
switch
var score = 'good';
switch(score){
case 'good':
console.log('good');
// break 表示退出循环
break;
case 'better':
console.log('better');
break;
case 'best':
console.log('best');
break;
default:
console.log('exit');
}
while
1. 设定循环变量
2. 判断是否成立
3. 更新循环变量
// 设定循环条件
var i = 1;
// 判断是否成立
while(i<10){
console.log(i);
// 更新循环变量
i++;
}
do_while
var i = 3;
do{
console.log(i);
i++;
}while(i<10)
for
for(var i = 1; i<10; i++){
console.log(i)
}
常用内置对象
Array - 数组
数组的创建
var colors = ['red','yellow','green']
数组的赋值
var arr = []
// 通过下标赋值
arr[0] = 'red'
arr[1] = 'yellow'
arr[2] = 'green'
常用方法
方法 | 描述 |
concat() | 把几个数组合并成一个 |
join() | 把数组内元素按指定分隔符拼接, 并返回 |
pop() | 移除数组最后一个元素 |
shift() | 移除数组第一个元素 |
unshift() | 开头添加一个新的元素, 返回长度 |
push() | 末尾添加一个新的元素, 返回长度 |
slice(start,end) | 返回一段数组 |
sort() | 排序 |
reverse() | 反转数组 |
length() | 返回长度 |
String - 字符串
方法 | 描述 |
charAt() | 返回指定索引位置的字符 |
replace(a,b) | 使用b替换a |
search() | 如果找到, 返回索引位置, 如果没找到, 返回-1 |
split(‘a’,x) | 以’a’分割, 返回数组, 第二个参数表示数组的前x个元素, 如果第一个元素为分隔符, 则返回的数组第一个元素为"" |
substr(start,end) | 按索引截取, 左闭右开 |
toUpperCase() | 返回新字符串, 字母变大写 |
toLowerCase() | 返回新字符串, 字母变小写 |
Date - 日期
语法 | 含义 |
Math - 内置对象
方法 | 含义 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.max(a,b) | 最大值 |
Math.min(a,b) | 最小值 |
Math.random() | 随机数, 默认0-1之前的随机数 |
函数和Object
函数的声明和调用
声明方式1
function funcA(x,y){
// do sth.
}
声明方式2
var funcA = function(x,y){
//do sth.
}
声明方式3
var add = (x,y)=>{
//do sth.
}
调用
funcA(x,y)
入口函数
等待页面加载完成后执行
window.onload = function(){
// do sth.
}
创建对象的几种常用方式
使用object创建对象
var student = new Object();
student.name = 'Tom';
student.age = 12;
使用字面量创建对象
适用于创建单个对象
var student = {
name : 'Tom',
age : 12,
}
工厂模式创建对象
批量创建同一类对象, 类似python中的class
关键字new写在函数内部
函数内部有return
function createStudent(name, age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
var student1 = createStudent('Tom',12);
var student2 = createStudent('Tim',13);
var student3 = createStudent('Jim',14);
构造函数模式创建对象
批量创建同一类对象
使用new关键字, 就是构造函数
函数内部不new Object()
函数内部没有return
function Student(name, age){
// python中class静态属性
this.name = name;
this.age = age;
// python中class动态属性
this.alertname = alertName;
}
function alertName(){
alert(this.name);
}
var student1 = new Student('Jim',14);
student1.alertname
原型模式创建对象
解决多个类公用方法的问题
function Student(name, age){
this.name = name;
this.age = age;
}
Student.prototype.alertName = function(){
alert(this.name);
};
var stu1 = new Student('Tom',12);
var stu2 = new Student('Tim',13);
stu1.alertName();
stu2.alertName();
alert(stu1.alertName == stu2.alertName);
// 结果为True, 两者共享一个函数
定时器
执行一次
setTimeOut()
周期执行
setInterval()
clearInetval()
function refresh(){
console.log('调用1次')
}
setInterval('refresh()',5)
正则
DOM
在JS中, 所有的事物都是节点. 元素, 文本等都是节点
操作DOM的三步
1. 事件源
2. 事件
3. 事件处理程序
获取DOM节点的方法
// 通过id获得
var oDiv = document.getElementById('box');
// 通过类名获得
var oDiv = document.getElementByClassName('box')[0];
// 通过标签名获得
var oDiv = document.getElementByTagName('div')[0];
常用的DOM节点
语法 | 含义 |
childNodes | 获取所有子节点, 包括元素,文本 |
children | 获取所有子节点, 不包括文本 |
parentNode | 获取父节点 |
previousSiblint | 获取上一个兄弟节点, 包含文本 |
previousElementSibling | 获取上一个兄弟节点, 不包含文本 |
nextSibling | 获取下一个兄弟节点, 包含文本 |
nextElementSibling | 获取下一个兄弟节点, 不包含文本 |
firstchild | 获取第一个兄弟节点, 包含文本 |
firstElementChild | 获取第一个兄弟节点, 不包含文本 |
lastChild | 获取最后一个兄弟节点, 包含文本 |
lastElementChild | 获取最后一个兄弟节点, 不包含文本 |
节点的增删改查
<html>
<body>
<div>
<h1> 标题1 </h1>
</div>
<div id='box'>
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<a>e</a>
</div>
<div>
<h2> 标题2 </h2>
</div>
</body>
<script type='text/javascript'>
// 获取标签
oDiv1 = document.getDlementById('box');
oDiv2 = document.getElementByClassName('box')[0];
oDiv3 = document.getElementByTagName('div')[0];
</script>
</html>
在html页面中增加标签
// 创建元素节点
var obj = document.createElement('p')
// 设置obj的内容
// 会渲染
obj.innerHTML = "<p>新添加</p>";
// 不会渲染
obj.innerText = "<p>新添加</p>";
// 将建好的元素节点添加到指定元素的所有内容的后边
oDiv.appendChild(obj)
设置属性
id
obj.id = 'id_name'
类名
obj.className = 'classname1';
obj.className = 'classname2';
标签属性
obj.setAttribute('href','https://www.baidu.com');
获取内容
获取元素内所有内容
// 包括标签和文本
console.log(oDiv.innerHTML);
获取元素节点的标签名
// 只获取标签名, 返回值为大写
console.log(odiv.tagName);
获取文本
// 只获取文本, 不获取标签
console.log(oDiv.innerText);
获取标签属性
console.log(obj.getAttribute('class'));
删除
删除属性
obj.removeAttribute('href');
删除对象
oDiv.removeChild(obj);
复制
// 如果为true, 复制当前节点及其所有子节点
替换
// 使用新节点替换旧节点
父节点.replaceChild(new_node, old_node)
注意
一般情况下, 如果css样式中出现'-'号, 则对应的style属性是去掉'-', 改为驼峰命名
BOM