一、函数
JavaScript 使用关键字 function 定义函数。
函数可以通过声明定义,也可以是一个表达式。
调用又分为有无返回值的调用
onclick:点击
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS的函数</title>
</head>
<body>
<script>
function calculator(a, b)
{
c = a+b;
alert("a+b=" + c);
return c;
}
// 1. 在JS程序中被调用 (包括有返回值和无返回值的调用)
// console.log("a+b=" + c)
</script>
<!-- 2. 在按钮或超链接被点击时调用(监听点击事件) -->
<!-- 2.1 监听按钮点击 -->
<input type="submit" value="计算a+b的和" onclick="calculator(1,2)" />
<br>
<!-- 2.2 监听超链接点击 -->
<a href="#" onclick="calculator(3,4)">百度一下,你就知道</a>
</body>
</html>
函数又分为全局变量以及局部变量
全局变量:常常定义在函数外部,拥有全局作用域,即在 JavaScript 代码的任何地方都可以访问。
局部变量:定义在函数内部,只能在函数中使用的变量,作用范围是从函数开始到结尾,即在{}里。
在函数内声明的变量只在函数体内有定义,即为局部变量,其作用域是局部性的。需要注意的是,在函数体内声明局部变量时,如果不使用 var 关键字,则将声明全局变量。
<script>
var c=1; //全局变量,既可以作用于所有函数内,又可以作用于函数外
function calculator1(a,b)
{
var d=2; //局部变量,只作用与函数内
return (a+b+c)*d; //返回6
}
rlt1 = calculator1(1,1)
console.log("计算结果为:" + rlt1)
rlt2 = (1+1+c)*d //函数外无法调用局部变量d,控制台报错
console.log("计算结果为:" + rlt2)
</script>
可以看到只作用在函数内的局部变量无法在局部外调用,所以控制台会报错
二、对象
1、可以直接手动定义一个对象
<script>
var person = {
firstName:"毛",
lastName:"主席",
age:83,
eyeColor:"黑色",
getName: function(){
allName = this.firstName + this.lastName;
return allName;
},
cal: function(a,b){
return a+b;
}
};
注意this对象的使用(指向自身),如果没有this,直接用属性名控制台会报错
2、也可以直接使用定义好的属性和方法
<script>
var person = {
firstName:"毛",
lastName:"主席",
age:83,
eyeColor:"黑色",
getName: function(){
allName = this.firstName + this.lastName;
return allName;
},
cal: function(a,b){
return a+b;
}
};
// 2.使用定义好的对象的属性和方法
console.log(person.eyeColor) //使用对象的属性
console.log(person.getName()) //使用对象的方法
console.log(person.cal(1,2)) //使用对象的方法
</script>
三、常用类
1.JS的内置类Array
JavaScript 数组是可调整大小的,并且可以包含不同的数据类型。(当不需要这些特征时,可以使用类型化数组)
JavaScript 数组不是关联数组,因此,不能使用任意字符串作为索引访问数组元素,但必须使用非负整数(或它们各自的字符串形式)作为索引访问。
JavaScript 数组索引从0开始:数组的第一个元素在索引 0
处,第二个在索引 1
处,以此类推,最后一个元素是数组的 length属性减去 1
的值。
1. length属性返回数组的元素个数(数组长度)
2. push方法用于在数组末端添加一个或多个元素,并返回
添加新元素后的数组长度。注意:该方法会改变原数组!
3. pop方法用于删除数组最后一个元素,并返回被删除的那个元素。
注意:该方法会改变原数组!
4. reverse方法用于颠倒排列数组元素,返回改变后的数组。
注意:该方法会改变原数组!
5. indexOf方法返回给定元素在数组中第一次出现的位置,若未出现返回-1
<script>
var persons=new Array("毛泽东","邓小平","江泽民");
console.log(persons.length); // 3
var persons=new Array("毛泽东","邓小平","江泽民");
len = persons.push("胡锦涛");
console.log('新数组为:' + persons +'->长度为:' + len);
var persons=new Array("毛泽东","邓小平","江泽民");
p = persons.pop("胡锦涛");
console.log('新数组为:' + persons +'->被移除的元素为: ' + p);
var persons=new Array("毛泽东","邓小平","江泽民");
p = persons.reverse();
console.log(p);
var persons = new Array("毛泽东","邓小平","江泽民");
console.log(persons.indexOf("邓小平")); //1
console.log(persons.indexOf("胡锦涛")); //-1
</script>
2.JS的内置类String
字符串
1. length属性返回字符串的长度
2. charAt方法返回指定位置的字符
3. concat方法用于顺序连接多个字符串,返回一个新字符串(不改变原字符串)
4. indexOf 方法用于确定一个字符串在另一个字符串中第一次出现的位置,
返回结果是匹配开始的位置。如果返回-1表示不匹配。
5..split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组
<script>
var s = 'hello';
console.log(s.length) // 5
var s = new String('hello');
console.log(s.charAt(1)); // "e"
console.log(s.charAt(s.length - 1)); // "o"
console.log(s.charAt(10)); // "" 索引超出返回空字符串
var s1 = new String('hello');
var s2 = new String(' world');
console.log(s1.concat(s2)); // "hello world"
console.log(s1.concat(s2, ' hi', ' beijing')); // "hello world hi beijing"
var s = new String('hello world');
console.log(s.indexOf("world")); //6
console.log(s.indexOf("hi")); //-1
var s = new String('hello world hi beijing');
console.log(s.split(' ')); // 按照空格分割 ['hello', 'world', 'hi', 'beijing']
</script>
3、JS的内置类Math
Math是JavaScript内置类,通过其内部的类方法,提供了各种数学功能
1. abs方法返回参数值的绝对值
2. max和min方法返回参数值的最大值和最小值
3. floor和ceil对参数向下取整和向上取整
4. random返回[0,1)之间的一个伪随机数
5. 保留小数点指定位数(直接当成固定函数使用)
<script>
console.log(Math.abs(1)) // 1
console.log(Math.abs(-1)) // 1
console.log(Math.max(1,2,3)) // 3
console.log(Math.min(1,2,3)) // 1
console.log(Math.floor(3.3)) // 3
console.log(Math.floor(-3.3)) // -4
console.log(Math.ceil(3.3)) // 4
console.log(Math.ceil(-3.3)) // -3
for (var index = 1; index <=5; index++)
{
console.log(Math.random())
}
// 随机输出任意范围的某个数(直接当成固定函数使用)
function getRandomInRange(min, max)
{
return Math.random() * (max - min) + min;
}
console.log(getRandomInRange(1, 20)); //随机输出1到20的某个数
function truncateDecimalPlaces(num, decimalPlaces)
{
let factor = Math.pow(10, decimalPlaces);
return Math.floor(num * factor) / factor;
}
console.log(truncateDecimalPlaces(3.14159, 2)); // 输出 3.14
</script>
4.js的内置类Date
// 基于Date类,创建一个对象示例,表示当前日期和时间
const now = new Date();
// 获取年份(四位数的年份,比如2024)
const year = now.getFullYear();
// 获取月份(从0开始,所以0表示1月,11表示12月,需要加1才能得到实际月份)
const month = now.getMonth() + 1;
// 获取日期(月份中的哪一天)
const day = now.getDate();
// 获取小时(24小时制)
const hours = now.getHours();
// 获取分钟
const minutes = now.getMinutes();
// 获取秒
const seconds = now.getSeconds();
// 输出当前未格式化的日期和时间
console.log(`当前日期和时间: ${year}-${month}-${day} ${hours}:${minutes}:${seconds}`);
也可输出格式化后的时间
const formattedDate = `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day}`;
const formattedTime = `${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
// 输出当前格式化后的日期和时间
console.log(`当前日期和时间: ${formattedDate} ${formattedTime}`);
格式化日期和时间字符串
如果month小于10,它会在month前面插入一个'0',否则插入一个空字符串''。
这样做的目的是确保月份始终是两位数(例如,1月变为01)。
同理,${day < 10 ? '0' : ''}${day}确保日期也是两位数。