JavaScript基础
JavaScript——客户端脚本语言
脚本语言:不需要编译,直接就可以被浏览器解析执行了
运行在客户端浏览器中:每一个浏览器都有JavaScript的解析引擎
作用:
用于增强用户和html页面的交互过程,可以来控制html元素,完成表单的检验,让页面有一些动态的效果,增强用户的体验。
ECMAScript:客户端脚本语言的标准
JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
基本语法
引用方式
- 内部:定义
<script>
标签写js代码 - 外部:定义
<script>
标签,提供src属性引入外部的js文件
<script>
可以定义在html页面的任何地方,但是定义的位置会影响执行顺序。<script>
可以定义多个。
数据类型
-
基本数据类型:
1. number:数字。 整数/小数/NaN
2. string:字符串。 字符串 “abc” “a” ‘abc’
3. boolean:true和false
4. null:一个对象为空的占位符
5. undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined -
引用数据类型:对象
变量
Java语言是强类型语言,而JavaScript是弱类型语言。
- 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据
- 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。
语法:
var 变量名 = 初始化值;
typeof运算符:获取变量的类型。
* typeof(null) = object
如果不用var也可以,此时定义的是全局变量(不推荐)
运算符
- 一元运算符 ++ – +(正号) -(负号)
在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动进行类型转换
* 其他类型转number:
* string转number:按照字面值转换。如果字面值不是数字,则转为NaN
* boolean转number:true转为1,false转为0 - 算数运算符
+ - * / % … - 赋值运算符
= += -+… - 比较运算符
> < >= <= == ===(全等于)- 比较方式
- 类型相同:直接比较
- 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
- 类型不同:先进行类型转换,再比较
- ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
- 类型相同:直接比较
- 比较方式
- 逻辑运算符
&& || ! - 三元运算符
表达式? 值1:值2;
流程控制语句
- if…else…
- switch:在JS中,switch语句可以接受任意的原始数据类型
- while
- do…while
- for
基本对象
-
Function:函数(方法)对象
- 创建
var fun = new Function("a", "alert(a);");
不推荐function 方法名称(形参){ 方法体 }
var 方法名 = function(形参){ 方法体 }
- 调用 :
方法名(实参)
- 属性:length 代表形参的个数
- 特点
- 方法定义时,形参的类型不用写,返回值类型也不写。
- 方法是一个对象,如果定义名称相同的方法,会覆盖原有方法
- 在JS中,方法的调用只与方法的名称有关,和参数列表无关,所以实参和形参的个数不一致也没关系
- 在方法声明中有一个隐藏的内置对象arguments数组,用于封装所有的实际参数
- 创建
-
Array:数组对象
- 创建:
- var arr = new Array(1, 2, 3, 4, 5); // list
- var arr = new Array(5); // len
- var arr = [1, 2, 3, 4, 5]; // list
- 方法
join(分隔符):将数组中的元素按照指定的分隔符拼接为字符串
push():向数组的末尾添加一个或更多元素,并返回新的长度。 - 属性
length 数组的长度 - 特点:
- JS中,数组元素的类型是可变的。
- JS中,数组的长度是可变的。
- 创建:
-
Boolean
-
Date:日期对象
- 创建:
var date = new Date();
- 方法:
toLocaleString()
返回当前date对象对应的时间本地字符串格式
getTime()
获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
- 创建:
-
Math:数学对象
- 创建:
Math对象不用创建,直接使用。 Math.方法名(); - 方法:
random():返回 0 ~ 1 之间的随机数。 含0不含1
ceil(x):对数进行上舍入。
floor(x):对数进行下舍入。
round(x):把数四舍五入为最接近的整数。 - 属性:PI
- 创建:
-
Number
-
String
-
RegExp:正则表达式对象
- 正则表达式:定义字符串的组成规则。
- 单个字符:[ ]
如:[a] [ab] [a-zA-Z0-9_]
\d:单个数字字符 [0-9]
\w:单个单词字符[a-zA-Z0-9_] - 量词符号:
?:表示出现0次或1次
*:表示出现0次或多次
+:出现1次或多次
{m,n}:表示出现 m<= 数量 <= n - 开始结束符号
* ^:开始
* $:结束
- 单个字符:[ ]
- 正则对象:
- 创建
1.var reg = new RegExp("正则表达式");
2.var reg = /正则表达式/;
- 方法
1. test(字符串):验证指定的字符串是否符合正则定义的规范
- 创建
- 正则表达式:定义字符串的组成规则。
-
Global
- 这个Global中封装的方法不需要对象就可以直接调用。 方法名();
- 方法:
URL编码:将中文转码为十六进制位
encodeURI():url编码
decodeURI():url解码
encodeURIComponent():url编码,编码的字符更多
decodeURIComponent():url解码
parseInt():将字符串转为数字
** isNaN(): **判断一个值是否是NaN
* NaN六亲不认,连自己都不认。NaN参与的==比较全部为false,因此只有通过 isNaN()才能判断NaN
** eval(): ** 将JavaScript字符串转化为JavaScript代码并执行。
BOM
-
概念:Browser Object Model 浏览器对象模型,将浏览器的各个组成部分封装成对象。
-
组成:
- Navigator:浏览器对象
- Window:窗口对象
- Location:地址栏对象
- History:历史记录对象
- Screen:显示器屏幕对象
Window:窗口对象
-
创建:
Window对象不需要创建可以直接使用 window使用:window.方法名();
且 window可以省略:方法名();
-
方法:
与弹出框有关的方法
alert()
显示带有一段消息和一个确认按钮的警告框。confirm()
显示带有一段消息以及确认按钮和取消按钮的对话框。- 如果用户点击确定按钮,则方法返回true
- 如果用户点击取消按钮,则方法返回false
prompt()
显示用于用户输入的对话框,返回值是获取用户输入的值。
与窗口开关有关的方法
5.close()
关闭当前打开的浏览器窗口。
6.open()
打开一个新的浏览器窗口。返回新的窗口对象// 关闭指定的窗口 var newWindow = open(url); newWindow.close();
与定时器有关的方式
7.setTimeout()
在指定的毫秒数后调用函数或计算表达式。var id = setTimeout(fun, 2000)
- 参数:
- js代码或者方法对象
- 毫秒值
- 返回值:唯一标识,用于取消定时器时传参
-
clearTimeout()
取消由 setTimeout() 方法设置的 timeout。clearTimeout(id)
-
setInterval()
按照指定的周期(以毫秒计)来调用函数或计算表达式。 -
clearInterval()
取消由 setInterval() 设置的 timeout。
-
属性:
对所有BOM对象的只读引用
history
location
Navigator
Screen
对DOM对象的只读引用
document
Location:地址栏对象
方法:reload 刷新当前文档
属性:href 用于设置或获取完整的 URL。
History:历史记录对象
方法:
- back() 加载 history 列表中的前一个 URL。
- forward() 加载 history 列表中的下一个 URL。
- go(参数) 加载 history 列表中的某个具体页面。
- 参数:
- 正数:前进几个历史记录
- 负数:后退几个历史记录
- 参数:
属性:
- length 返回当前窗口历史列表中的 URL 数量。
DOM
Document Object Model 文档对象模型 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
W3C DOM 标准被分为 3 个不同的部分:
* 核心 DOM - 针对任何结构化文档的标准模型
* Document:文档对象
* Element:元素对象
* Attribute:属性对象
* Text:文本对象
* Comment:注释对象
* Node:节点对象,其他5个的父对象
* XML DOM - 针对 XML 文档的标准模型
* HTML DOM - 针对 HTML 文档的标准模型
核心DOM
Document对象
- 创建(获取):在html dom模型中可以使用window对象来获取 (window.)document
- 方法:
- 获取Element对象:
- getElementById(): 根据id属性值获取元素对象。id属性值一般唯一
- getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
- getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- getElementsByName():根据name属性值获取元素对象们。返回值是一个数组
- 创建其他DOM对象:
createAttribute(name)
createComment()
createElement()
createTextNode()
- 获取Element对象:
- 属性
Element对象
- 创建:通过document来获取和创建
- 方法:
- removeAttribute():删除属性
- setAttribute():设置属性
- 操作Element对象:
- 修改属性值:
- 明确获取的对象是哪一个?
- 查看API文档,找其中有哪些属性可以设置
- 修改标签体内容:
- 属性:innerHTML
- 获取元素对象
- 使用innerHTML属性修改标签体内容
Node节点对象——其他5个的父对象
- 创建:所有dom对象都可以被认为是一个Node节点对象,不用特别创建
- 方法: 用于CRUD dom树
- appendChild():向节点的子节点列表的结尾添加新的子节点。
- removeChild() :删除(并返回)当前节点的指定子节点。
- replaceChild():用新节点替换一个子节点。
- 属性:
- parentNode 返回节点的父节点。
案例:动态表格的增删
标签a中href属性设置“#”或者“javascript:;”可以拦截跳转
/*
分析:
1.添加:
1. 给添加按钮绑定单击事件
2. 获取文本框的内容
3. 创建td,设置td的文本为文本框的内容。
4. 创建tr
5. 将td添加到tr中
6. 获取table,将tr添加到table中
2.删除:
1.确定点击的是哪一个超链接
<a href="javascript:void(0);" οnclick="delTr(this);" >删除</a>
2.怎么删除?
removeChild():通过父节点删除子节点
*/
//1. 通过document的创建DOM对象添加
/*document.getElementById("btn_add").onclick = function () {
//2.获取文本框的内容
var id = document.getElementById("id").value;
var name = document.getElementById("name").value;
var gender = document.getElementById("gender").value;
//3.创建td,赋值td的标签体
//id 的 td
var td_id = document.createElement("td");
var text_id = document.createTextNode(id);
td_id.appendChild(text_id);
//name 的 td
var td_name = document.createElement("td");
var text_name = document.createTextNode(name);
td_name.appendChild(text_name);
//gender 的 td
var td_gender = document.createElement("td");
var text_gender = document.createTextNode(gender);
td_gender.appendChild(text_gender);
//a标签的td
var td_a = document.createElement("td");
var ele_a = document.createElement("a");
ele_a.setAttribute("href", "javascript:void(0);");
ele_a.setAttribute("onclick", "delTr(this);");
var text_a = document.createTextNode("删除");
ele_a.appendChild(text_a);
td_a.appendChild(ele_a);
//4.创建tr
var tr = document.createElement("tr");
//5.添加td到tr中
tr.appendChild(td_id);
tr.appendChild(td_name);
tr.appendChild(td_gender);
tr.appendChild(td_a);
//6.获取table
var table = document.getElementsByTagName("table")[0];
table.appendChild(tr);
}*/
//2. 使用元素的innerHTML属性添加
document.getElementById("btn_add").onclick = function() {
//2.获取文本框的内容
var id = document.getElementById("id").value;
var name = document.getElementById("name").value;
var gender = document.getElementById("gender").value;
//获取table
var table = document.getElementsByTagName("table")[0];
//追加一行
table.innerHTML += "<tr>\n" +
" <td>"+id+"</td>\n" +
" <td>"+name+"</td>\n" +
" <td>"+gender+"</td>\n" +
" <td><a href=\"javascript:void(0);\" οnclick=\"delTr(this);\" >删除</a></td>\n" +
" </tr>";
}
//删除方法
function delTr(obj) {
var table = obj.parentNode.parentNode.parentNode;
var tr = obj.parentNode.parentNode;
table.removeChild(tr);
}
HTML DOM
- 标签体的设置和获取:
innerHTML
- 使用html元素对象的属性
- 控制元素样式
- 使用元素的style属性来设置
div1.style.border = "1px solid red"; div1.style.width = "200px"; //font-size--> fontSize div1.style.fontSize = "20px";
- 提前定义好类选择器的样式,再将目标元素的className属性值设置为该类选择器。(推荐)div.className = 类选择器
bootstrap快速入门
待续