JavaScript简单教学
现在大多数浏览器还是支持ES5,学习会使用ES6,也就是说有的功能浏览器还不支持,请注意。
第一个JavaScript程序
在html中
- 内部标签
1 | <script> |
- 外部引入
js写内容
1 | <script src="xxx.js"></script> |
基本语法
js多用控制台调试
用var声明变量,var可用于任一种数据类型的声明
1 | var num = 1; |
类似java,js也有条件判断语句
1 | if(2>1) |
数据类型简述
- number
1 | 111//一般类型 |
字符串
- ‘aaa’
- “aaa”
布尔值
true、false
逻辑运算
&&、||、!
比较运算符(js特点)
1 | = //赋值 |
所以JavaScript使用===比较。
注意:
NaN===NaN会判断为false,NaN与所有数据都不等包括其本身。
我们要通过isNaN(NaN)来判断是否为NaN
- 浮点数
避免使用浮点数计算,会有精度损失。
null和undefined
- null 空
- undefined 未定义
数组
js数组可存放不同类型元素
且数组越界显示为undefined
1 | var arr=[1,2,3,'hello',null,true]; |
- 对象
定义都使用var,但对象用大括号,数组用中括号。
对象定义中每个属性用逗号隔开,最后一个不用。
严格检查模式、
‘use strict’
1 | // 局部变量建议用let定义,而不是var |
这里若没有’use strict’则num是可以输出的,使用严格检查模式后,我们要规范编写必须定义变量,且此时不应使用var,而用let(局部变量),用var会警告。
数据类型
console.log 控制台输出
1、字符串
- 字符串一般使用单引号和双引号。
- 注意使用转义字符(记得要单引号/双引号包裹)
1 | \' |
- 多行字符(``包裹)
1 | let sss= |
- 模板字符串(可用${}连接字符串)
1 | let name="tang"; |
- 字符串长度
1 | str.length |
- js字符串不可变,类似java只是换了个存储空间
- 大小写
1 | str.toUpperCase() // 大 |
str.indexOf(‘x’) // 获得字符位置
substring()(截取字符串)
1 | str.substring(start,stop); |
2、数组
数组可包含任意数据类型
- 长度
1 | arr.length |
给数组长度赋值,其大小会变化,若赋值过小则数组会丢失。
- indexOf(获得元素下标)
返回某个指定字符串值在字符串中首次出现的位置
注意:存的字符串”9”和数字9是不同的
- slice()(截取数组)
截取数组的一部分,类似Stringsubstring方法
- push(),pop()(尾部操作)
1 | 在尾部操作 |
- unshift(),shift()(头部操作)
1 | 在头部操作 |
- sort() 升序
- reverse() 元素反转
- concat() 拼接字符串
- join(-)
用特定字符连接字符串,例如这里用-连接
- 多维数组(和java类似)
3、对象
若干键值对,键是字符串,值是任意数据类型
多逗号连接,最后一个不用
1 | var 对象名{ |
- 使用不存在的对象,不报错,只显示undefined
- 动态删减属性
1 | delete 对象.属性名 |
- 动态添加
直接给属性赋值就行,毕竟js属性是undefined,而不是没有。
1 | 对象.属性名="属性值" |
- 判断属性是否在对象中,xxx in xxx
1 | '属性名' in 对象 |
- 判断一个属性是否是对象本身拥有(即非父类的)
1 | man.hasOwnProperty(name); |
4、控制语句
if-else
while
for
forEach
for···in(类似foreach)
5、Map和Set
ES6中新特性
1 | var map = new Map([['tang',111],['jiji',888],['wwwww',9999]]); |
6、iterator(for-of,ES6新功能)
只有提供Iterator接口的数据类型才能使用for-of
使用for-of语句遍历Map和Set
1 | var map = new Map([['tang',111],['jiji',888],['wwwww',9999]]); |
- for-of和for-in区别
- 遍历数组时,for-of对应value值,for-in对应key也就是数组小标
- 遍历Map、Set必须用for-of,for-in会显示为undefined
- 一般for-in用于对象,for-of用于数组和Map、Set类型
函数(function)
1、两种定义方法
1 | // 第一种 |
若不存在参数,可手动抛出异常
2、arguments
arguments会包含所有参数,包括隐藏的。
参考:https://baike.baidu.com/item/arguments/4291417?fr=aladdin
3、变量作用域
函数内声明var变量,在函数外用不了
但闭包可以实现
内部函数可以访问外部函数变量,反之不行
函数变量定义应全放在头部,要先定义
全局变量:定义在函数外,全局使用,也可不用var,但这样不严谨
全局对象window
js只有一个全局作用域,任何变量(函数也可视为变量),函数在其作用范围内没找到,它就会向外查找,全局都找不到则报错ReferenceError
局部作用域 let
1 | function sss(){ |
用let定义局部变量,这里var定义则结束循环后i的值对外部仍有影响。
常量 const
const定义变量,不能对其进行后续改变。
方法
方法就是把函数放在对象内,对象:属性+方法
1 | var student = { |
apply
在js中可控制this,可用apply调用函数的方法。
内部对象
标准对象:
1 | typeof NaN; |
1、Date
1 | var now = new Date(); |
2、JSON
- JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
- 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON格式:
- 对象使用{}
- 数组使用[]
- 键值对:key:value
JSON和js对象转换
1 | //对象->JSON字符串 |
3、Ajax
。。。。。
面向对象
1、使用原型
1 | //注意这里是两个_ |
1 | var student={ |
2、class、继承
class关键字,ES6才引入
- 定义类,注意构造器固定叫constructor
- 继承 extends
1 | class student{ |
3、原型链
参考:https://www.cnblogs.com/loveyaxin/p/11151586.html
就是原型找原型,形成一个链。相当于一个继承的体系,类似java类都是从object开始继承的。
操作BOM对象(重点)
BOM浏览器对象模型
window
window代表浏览器窗口
1 | window.Infinity |
Navigator
Navigator封装了浏览器的信息
1 | navigator.appName |
screen
屏幕尺寸
1 | screen.width |
location(重要!!!)
location代表当前页面的URL信息
1 | //控制台location |
document
document可代表当前页面
1 | <!--获得当前文档树节点--> |
获得网页cookie
1 | document.cookie |
history
历史记录
1 | history.back() |
操作DOM对象(重点)
DOM:文档对象模型
核心
浏览器网页是一个DOM树形结构
- 更新DOM节点
- 遍历DOM节点
- 删除DOM节点
- 添加DOM节点
1 | <div id="father"> |
1、更新节点
1 | father.innerText='tang';//修改文本值 |
2、删除节点
- 先获取父节点,在删除
- 删除多个节点时,节点位置是动态变化的
1 | father.removeChild(p1); |
3、插入节点
innerText会覆盖原数据,所以有时需要添加得使用其他的方法。
可添加已有节点和新生成节点
1 | <html lang="en"> |
insertBefore
1 | var p1 = document.getElementById('a'); |
操作表单
1 | <form action="login"> |
MD5加密
md5(xxx),使用函数加密。
onsubmit
form可配置的参数,绑定一个提交验证的函数,将其true、false返回给onsubmit来验证。
jQuery
jQuery库,里面有大量js函数
官方文档:https://jquery.cuishifeng.cn/index.html
jQuery CDN加速,在线jQuery
网站:https://www.bootcdn.cn/jquery/
jQuery万用公式
$(‘selector’).action()
$(‘选择器’).事件函数()
1 | <a href="" id="test-jquery">111</a> |
选择器
1 | $('p').click()//标签选择器 |
事件
1 | <!DOCTYPE html> |
操作DOM
1 | //无参获得值,有参设置值 |
css操作
1 | $('#ul li[name=l2]').css("color","red"); |
小结
建议速速过完web然后看框架。。