JavaScript
学习目标:
- 熟悉JS代码的语法
JS
JavaScript是运行在浏览器端的脚本语言, 是由浏览器解释执行的, 简称js, 它能够让网页和用户有交互功能, 提高用户体验效果。
JavaScript是一种弱类型语言
强类型语言:
也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
弱类型语言:
也称为弱类型定义语言。与强类型语言相反,是一种数据类型可以被忽略的语言,一个变量可以赋于不同数据类型的值。
例如:
Python中整数类型的5与字符串类型的"5"相 “+”,即5 + “5”
如果不进行类型转换,会报类型错误
把整数类型的5强制转换为字符串类型的"5":str(5) + “5”,结果为字符串类型的"55"
把字符串类型的"5"强制转换为整数类型的5:5 + int(“5”),结果为整数类型的10
JavaScript中数字类型的5与字符串类型的"5"相 “+”,即5 + “5”,数字类型的5会**自动转换(也叫隐式转换)**成字符串类型的“5”,最终运行结果为“55”
Python中中整数类型的5与字符串类型的"5"进行比值,即5 == “5”,因为两者类型不同,结果为False
JavaScript中数字类型的5与字符串类型的"5"进行比值, 即5 == “5”,字符串类型的"5"会**自动转换(也叫隐式转换)**成数字类型的5,最终结果为true
动态语言:
解释器从上往下读代码,读一行,就把这行代码解释成二进制,然后就执行这行代码
静态语言:
编译器先把整个代码文件全部编译成二进制文件,然后再执行这个二进制文件
强类型定义语言在定义速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python 是动态语言,是强类型定义语言(类型安全的语言); JavaScript 是动态语言,是弱类型定义语言(类型不安全的语言); JAVA 是静态语言,是强类型定义语言(类型安全的语言)。
一、JavaScript的使用方式
- 行内式
- 内嵌式
- 外链式
1.1行内式(主要用于事件)
<input type="button" name="" onclick="alert('ok!');">
1.2内嵌式
<script type="text/javascript">
alert('ok!');
</script>
1.3外链式
<script type="text/javascript" src="js/index.js"></script>
重点掌握内嵌式和外链式
二、变量和数据类型
2.1定义变量的语法格式:
var 变量名 = 值;
var iNum = 123;
var sTr = 'asd';
//同时定义多个变量可以用","隔开,公用一个‘var’关键字
var iNum = 45,sTr='qwe',sCount='68';
2.2数据类型
js中有六种数据类型,包括五种基本数据类型和一种复杂数据类型(object)。
5种基本数据类型:
1、number: 数字类型
2、string: 字符串类型
3、boolean: true 或 false
4、undefined: 变量声明未初始化,它的值就是undefined
5、null: 表示空对象,如果定义的变量将来准备保存对象,可以将变量初始化为null,在页面上获取不到对象,返回的值就是null
1种复合类型:
object: 后面学习的数组、函数和JavaScript对象都属于复合类型
2.3 变量命名规范
1、区分大小写
2、第一个字符必须是字母、下划线(_)或者美元符号($)
3、其他字符可以是字母、下划线、美元符或数字
匈牙利命名风格
对象o Object 比如:oDiv
数组a Array 比如:aItems
字符串s String 比如:sUserName
整数i Integer 比如:iItemCount
布尔值b Boolean 比如:bIsComplete
浮点数f Float 比如:fPrice
函数fn Function 比如:fnHandler
2.4 JavaScript注释
JavaScript的注释分为单行注释(//注释内容)和多行注释(/*多行注释*/)
三、函数的定义和调用
-
函数的定义
function 函数名(参数[参数可选]){ // 函数的代码实现 ... }
-
函数的调用
函数名(参数[参数可选])
**示例代码: **
<script type="text/javascript">
function fnAdd(iNum01,iNum02){
var iRs = iNum01 + iNum02;
return iRs;
alert('here!');
}
var iCount = fnAdd(3,4);
alert(iCount); //弹出7
</script>
四、变量作用域
变量作用域就是变量的使用范围,变量分为:
- 局部变量
- 全局变量
4.2 局部变量
局部变量就是在函数内使用的变量,只能在函数内部使用。
<script type="text/javascript">
function myalert()
{
// 定义局部变量
var b = 23;
alert(b);
}
myalert(); // 弹出23
alert(b); // 函数外使用出错
</script>
4.3 全局变量
全局变量就是在函数外定义的变量,可以在不同函数内使用。
<script type="text/javascript">
// 定义全局变量
var a = 12;
function myalert()
{
// 修改全局变量
a++;
}
myalert();
alert(a); // 弹出13
</script>
五、条件语句
5.1 条件语句语法
- if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
- if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
- if…else if…else 语句 - 使用该语句来判断多条件,执行条件成立的语句
5.2 比较运算符
假如 x = 5, 查看比较后的结果:
比较运算符 | 描述 | 例子 |
---|---|---|
== | 等于(等号两边类型不同, 会先转换类型) | x == 8 为 false |
=== | 全等(值和类型) | x === 5 为 true; x === “5” 为 false |
!= | 不等于 | x != 8 为 true |
> | 大于 | x > 8 为 false |
< | 小于 | x < 8 为 true |
>= | 大于或等于 | x >= 8 为 false |
<= | 小于或等于 | x <= 8 为 true |
比较运算符示例代码:
var iNum01 = 12;
var sNum01 = '12';
if(iNum01==12){
alert('相等!');
}
else{
alert('不相等!')
}
// "==" 符号默认会将符号两边的变量转换成数字再进行对比,这个叫做隐式转换
if(sNum01==12){
alert('相等!');
}
else{
alert('不相等!')
}
// "===" 符号不会转换符号两边的数据类型
if(sNum01===12){
alert('相等!');
}
else{
alert('不相等!')
}
// 多条件判断
var sFruit = "苹果";
if (sFruit == "苹果") {
alert("您选择的水果是苹果");
} else if (sFruit == "鸭梨") {
alert("您选择的水果是鸭梨");
} else {
alert("对不起,您选择的水果不存在!")
}
5.3 逻辑运算符
假如 x=6, y=3, 查看比较后的结果:
比较运算符 | 描述 | 例子 |
---|---|---|
&& | and | (x < 10 && y > 1) 为 true |
|| | or | (x5 || y5) 为 false |
! | not | !(x==y) 为 true |
逻辑运算符示例代码:
var x = 6;
var y = 3;
if(x < 10 && y > 1){
alert('都大于');
}
else{
alert('至少有一个不大于');
}
if(x > 5 || y > 7 ){
alert('至少有一个大于');
}
else{
alert('都不大于');
}
if(!(x == y)){
alert('等于')
}
else{
alert('不等于')
}
六、获取标签元素和操作标签元素属性
标签属性的获取和设置:
- var 标签对象 = document.getElementById(‘id名称’); -> 获取标签对象
- var 变量名 = 标签对象.属性名 -> 读取属性
- 标签对象.属性名 = 新属性值 -> 设置属性
获取标签元素属性
<head>
<style>
.btnstyle{
background: yellow;
font-size: 30px;
}
</style>
<script>
// 等页面加载完之后执行匿名函数
window.onload = function(){
// 根据id获取标签对象
var oBtn = document.getElementById("btn1");
// 获取标签的属性
alert(oBtn.type);
alert(oBtn.value);
// 设置标签的属性
oBtn.name = "username";
// 设置样式的属性
// oBtn.style.background="red";
// 相当于设置class ,以后通过类选择器给标签添加样式
// 注意点: class 这里变成 className
oBtn.className = "btnstyle"
// font-size => fontSize
// oBtn.style.fontSize = "30px";
};
</head>
<body>
<input type="button" value="按钮" id="btn1" >
</body>
七、数组
数组就是一组数据的集合,javascript 中,数组里面的数据可以是不同类型的数据,好比 python 里面的列表。
7.1 数组的定义
// 实例化对象方式创建
var aList = new Array(1,2,3);
// 字面量方式创建,推荐使用
var aList2 = [1,2,3,'asd'];
7.2多维数组
多维数组指的是数组的成员也是数组,把这样的数组叫做多维数组。
var aList = [[1,2,3],['a','b','c']];
7.3数组的操作
7.3.1 获取数组的长度
var aList = [1,2,3,4];
alert(aList.length); // 弹出4
7.3.2 根据下标取值
var aList = [1,2,3,4];
alert(aList[0]); // 弹出1
7.3.3 从数组最后添加和删除数据
var aList = [1,2,3,4];
aList.push(5);
alert(aList); //弹出1,2,3,4,5
aList.pop();
alert(aList); // 弹出1,2,3,4
7.3.4 根据下标添加和删除元素
arr.splice(start,num,element1,…,elementN)
参数解析:
- start:必需,开始删除的索引。
- num:可选,删除数组元素的个数。
- elementN:可选,在start索引位置要插入的新元素。
此方法会删除从start索引开始的num个元素,并将elementN参数插入到start索引位置。
var colors = ["red", "green", "blue"];
colors.splice(0,1); //删除第一项
alert(colors); //green,blue
colors.splice(1, 0, "yellow", "orange"); //从第一个索引位置插入两项数据
alert(colors); //green,yellow,organge,blue
colors.splice(1, 1, "red", "purple"); //删除一项,插入两项数据
alert(colors); //green,red,purple,orange,blue
八、循环语句
javascript中常用的循环语句有:
- for
- while
- do-while
8.1 for循环
var array = [1, 4, 5];
for(var index = 0; index < array.length; index++){
result = array[index];
alert(result);
}
8.2 while循环
var array = [1, 4, 5];
var index = 0;
while (index < array.length) {
result = array[index];
alert(result);
index++;
}
**注意: ** 当条件成立的时候, while语句会循环执行
8.3 do-while循环
var array = [1, 4, 5];
var index = 0;
do {
result = array[index];
alert(result);
index++;
} while (index < array.length);
注意: 当条件不成立的时候do语句也会执行一次
九、定时器
定时器就是在一段特定的时间后执行某段程序代码。
9.1 定时器的使用:
js 定时器有两种创建方式:
- setTimeout(func[, delay, param1, param2, …]) :以指定的时间间隔(以毫秒计)调用一次函数的定时器
- setInterval(func[, delay, param1, param2, …]) :以指定的时间间隔(以毫秒计)重复调用一个函数的定时器
setTimeout函数的参数说明:
- 第一个参数 func , 表示定时器要执行的函数名
- 第二个参数 delay, 表示时间间隔,默认是0,单位是毫秒
- 第三个参数 param1, 表示定时器执行函数的第一个参数,一次类推传入多个执行函数对应的参数。
<script>
function hello(){
alert('hello');
}
// 执行一次函数的定时器
setTimeout(hello, 500);
</script>
setInterval函数的参数说明:
- 第一个参数 func , 表示定时器要执行的函数名
- 第二个参数 delay, 表示时间间隔,默认是0,单位是毫秒
- 第三个参数 param1, 表示定时器执行函数的第一个参数,一次类推传入多个执行函数对应的参数。
<script>
function hello(){
alert('hello');
}
// 重复执行函数的定时器
setInterval(hello, 1000);
</script>
9.2 清除定时器
js 清除定时器分别是:
- clearTimeout(timeoutID) 清除只执行一次的定时器(setTimeout函数)
- clearInterval(timeoutID) 清除反复执行的定时器(setInterval函数)
clearTimeout函数的参数说明:
- timeoutID 为调用 setTimeout 函数时所获得的返回值,使用该返回标识符作为参数,可以取消该 setTimeout 所设定的定时执行操作。
<script>
function hello(){
alert('hello');
// 清除只执行一次的定时器
clearTimeout(t1)
}
// 执行一次函数的定时器
t1 = setTimeout(hello, 500);
</script>
clearInterval函数的参数说明:
- timeoutID 为调用 setInterval 函数时所获得的返回值,使用该返回标识符作为参数,可以取消该 setInterval 所设定的定时执行操作。
<script>
function hello(){
alert('hello');
}
// 重复执行函数的定时器
var t1 = setInterval(hello, 1000);
function stop(){
// 清除反复执行的定时器
clearInterval(t1);
}
</script>
<input type="button" value="停止" οnclick="stop();">