WEBBASE篇: 第十篇, JavaScript知识5
JavaScript知识5
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script> /**
* 判断指定年份是否为闰年
* 参数 year:待判断的年份
* 返回值:true,表示是闰年,false,表示非闰年
*/
function isRun(year){
if(year%4==0&&year%100!=0||year%400==0){
return true;
}else{
return false;
}
} function calDate(){ var year = Number(prompt("请输入年:"));
var month = Number(prompt("请输入月:"));
var day = Number(prompt("请输入日:"));
var totalDays = 0;//天数累加变量
//1、计算从1900年开始,到year-1年共有多少天
for(var i=1900;i<year;i++){
//判断 i 年是否为闰年
if(isRun(i)){
totalDays += 366;
}else{
totalDays += 365;
}
}
//2、累加当前年从1月开始到month-1月的天数
for(var i=1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
totalDays += 31;
break;
case 4:
case 6:
case 9:
case 11:
totalDays += 30;
break;
case 2:
if(isRun(year)){
totalDays += 29;
}else{
totalDays += 28;
}
break;
}
}
//3、累加 day 到 totalDays 后
totalDays += day; //4、结果 1-6,星期一-星期六,0,星期日
var date = totalDays % 7;
var msg = year+"年"+month+"月"+day+"日是星期";
switch(date){
case 1:
msg += "一";
break;
case 2:
msg += "二";
break;
case 3:
msg += "三";
break;
case 4:
msg += "四";
break;
case 5:
msg += "五";
break;
case 6:
msg += "六";
break;
case 0:
msg += "日";
break;
}
console.log(msg);
}
</script>
<button onclick="calDate()">日期计算器</button>
</body>
</html>
一,函数:
由ES提供的函数
在网页中无需声明,就可以直接使用
已学:parseInt() / parseFloat() / Number()
1、isNaN(value)
判断value是否为非数字
true:不是数字
false:是数字
2、eval()
执行由字符串来表示的JS代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function runJS(){
var input = prompt("请输入一段JS代码:");
eval(input);
}
</script>
<button onclick="runJS()">运行JS</button>
</body>
</html>
二、局部变量 与 全局变量
1、全局变量
一经声明后,在JS的任何位置处都能使用的变量就是全局变量
(1)、
<script>
var uname = "sanfeng.zhang"; //全局变量
function show(){
console.log(uname); //输出 sanfeng.zhang
}
</script>
(2)、
<script>
function show(){
uname = 'sf.zh';//全局变量,容易出问题
}
</script>
推荐:
全局变量声明的时候:
1、使用 var 关键字
2、一律放在<script>中,所有function之外
2、局部变量
使用var关键字,并且声明在 function 中的变量就是局部变量;
局部变量的作用域只在声明的函数内,出了函数就不能使用;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function show(){
uname = "sanfeng.zhang";
console.log("show:"+uname);
} function print(){
console.log("print:"+uname);
}
</script>
<button onclick="show()">调用show()</button>
<button onclick="print()">调用print()</button>
</body>
</html>
三、数组
1、什么是数组
数组(Array)是一个用于保存批量数据的结构,即一个变量中允许保存多个数据。是按照线性结构的方式来保存数据的;
2、创建数组
(1)创建一个空数组
var 数组名 = [];
(2)创建数组并初始化元素
var 数组名 = [元素1,元素2,... ...];
(3)创建一个空数组
var 数组名 = new Array();
(4)创建数组并初始化元素
var 数组名 = new Array(元素1,元素2,... ...);
练习:
1、使用 [] 的方式创建一个数组并构建元素
张无忌,张翠山,张三丰,金毛狮王
2、使用 new 的方式创建一个数组并构建元素
赵敏,殷素素,周芷若,金花婆婆
3、在控制台中直接将两个数组进行打印
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function testArray(){
//1、使用 [] 创建数组
var names1 = ["张三丰","张无忌","张翠山","金毛狮王"];
//2、使用 new 创建数组
var names2 = new Array("金花婆婆","赵敏","周芷若","殷素素");
console.log("******打印数组******");
console.log("names1"+names1);
console.log("names2"+names2);
console.log("******获取元素******");
console.log("names1中的第2个元素:"+names1[1]);
console.log("names2中的第3个元素:"+names2[2]);
console.log("names1中的第9个元素:"+names1[8]);
console.log("******为元素赋值****");
//将 names1 中的第一个元素设置为 漩涡鸣人
names1[0] = "漩涡鸣人";
console.log("names1修改后:"+names1);
//为 names1 中的第五个元素赋值为 佐助
names1[4] = "佐助";
console.log("names1增加后:"+names1);
//为 names1 中的第十个元素赋值为 雏田
names1[9] = "雏田";
console.log(names1);
console.log(names1[6]);
}
</script>
<button onclick="testArray()">创建数组</button>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function testLength(){
var names = ["鸣人","佐助","小樱","卡卡西"];
console.log("names数组中元素的个数:"+names.length);
//循环遍历 names 中的每一个元素
for(var i=0;i<names.length;i++){
console.log(i+":"+names[i])
}
}
</script>
<button onclick="testLength()">测试Length()</button>
</body>
</html>
3、数组的使用
获取 或 设置数组中的元素,一律都使用下标
下标范围:从0开始,到元素个数-1为止
(1)、想获取数组中的第2个元素
数组名[1]
(2)、为数组元素赋值
数组名[下标] = 值;
4、获取数组的长度
属性:length
用法:数组名.length
eg:
var names = ["鸣人","佐助","小樱","卡卡西"];
console.log(names.length);//4
使用场合:
1、配合循环,遍历数组中的每一个元素
2、能够找到数组中,最新要插入元素的位置
var names = ["鸣人","佐助","小樱","卡卡西"];
names[names.length] = "纲手";
练习:
1、让用户循环的从弹框中录入数据,并将数据保存进一个数组中,直到输入 exit 为止(exit不存)。打印数组到控制台中
2、声明一个数组(初始化若干整数),查找该数组中的最大值
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function saveName(){
var names = [];
while(true){
var input = prompt("输入姓名:");
if(input == "exit"){
break;
}
names[names.length] = input;
}
console.log(names);
} function findMax(){
var nums = [875,63,-129,3,7893,67,125];
var max = nums[0];
for(var i=1;i<nums.length;i++){
if(nums[i] > max){
max = nums[i];
}
}
console.log("该数组中的最大值为:"+max);
}
</script> <button onclick="saveName()">录入数据</button>
<button onclick="findMax()">获取最大值</button>
</body>
</html>
5,关联数组
(1)概念: js中数组分为索引数组和关联数组;
索引数组:由数字做下标;
关联数组:由字符串做下标;
(2)声明和使用关联数组;
var names = [];
names["xyj"] = "西游记";
names["hlm"] = "红楼梦";
names["shz"] = "水浒传";
console.log(names["hlm"]);
(3)注意: length只能统计出索引数组的长度,而关联数组则不包含在内;
(4)使用 for.....in 遍历数组;
作用: 能够遍历数组中所有的数字下标和字符串下标;
语法: for (var 变量 in 数组){
变量:数组中所有的数字下标和字符串下标;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>关联数组</title>
</head>
<body>
<script>
function testArray(){
var names = [];
names[0] = "西游记";
names[1] = "水浒传";
names["xyj"] = "古代神话小说";
names["shz"] = "古代武侠小说"; console.log(names[0]);
console.log(names["xyj"]); console.log("数组的长度:"+names.length); for(var i = 0; i < names.length ; i ++){
console.log(i+":"+names[i]);
} for(var i in names){
console.log(i+":"+names[i]);
}
}
</script>
<button onclick="testArray()">测试关联数组</button>
</body>
</html>
6,数组的常用API
(1) toString()
作用: 将数组转换为字符串返回;
(2)join(seperator)
作用: 返回一个由指定连接符连接的数组元素的字符串;
参数: seperator : 连接符
(3)concat(arr1, arr2,.......)
作用: 拼接多个数组到一起,并返回拼接后的结果;
语法: arr.concat(arr1,arr2,.....)
注意: 该函数并不会改变数组,而是返回拼接后的一个副本;
(4)reverse()
作用:反转
语法:arr.reverse()
注意:该函数会改变现有数组的结构;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function testToString(){
var names = ["李白","杜甫","李清照","白居易"];
console.log(names);
console.log(names.toString());
console.log(names.join('and'));
} function testConcat(){
var name1 = ["潘金莲","李师师","鄢颇系"];
var name2 = ["刘姥姥","林黛玉","王熙凤"];
var name3 = ["大乔","小乔","貂蝉"];
var newArr=name1.concat(name2,name3);
console.log(newArr);
} function decode2Bin(){
var num = Number(prompt("请输入一个数字:"));
var arr = [];
//循环获取 num 与 2的余数,并保存进arr,再将num/2变为整数后再赋值给 num
while(num > 0){
//1、获取 num 与 2 的余数
var yu = num % 2;
//2、将yu保存进 arr 数组中
arr[arr.length] = yu;
//3、将 num / 2 取整,再赋值给 num
num=parseInt(num / 2);
}
//将 arr 进行反转
arr.reverse();
console.log(arr.join(""));
} /**
* 声明一个 升序的排序函数
*/
function sortAsc(a,b){
return a-b;
} function testSort(){
var nums = [38,6,121,76,65,23,1128];
console.log("排序前:"+nums);
//nums.sort(sortAsc); //升序排序 //使用匿名函数完成降序排序
nums.sort( function(a,b){
return b-a;
} );
console.log("排序后:"+nums);
} function testStack(){
var names = ["张无忌","张翠山"];
console.log("原始数组:"+names);
//1、向names数组中追加新元素 张三丰
var len = names.push("张三丰");
console.log("新数组:"+names);
console.log("长度:"+len);
//2、向数组头部增加一个新匀速 赵敏
len = names.unshift("赵敏");
console.log("新数组:"+names);
console.log("长度:"+len);
//3、删除names头部和尾部的元素
var delFirst = names.shift();
var delLast = names.pop();
console.log("数组:"+names);
console.log("删除:"+delFirst);
console.log("删除:"+delLast);
}
</script>
<button onclick="testToString()">测试toString()</button>
<button onclick="testConcat()">测试concat</button>
<button onclick="decode2Bin()">十进制转二进制</button>
<button onclick="testSort()">测试排序</button>
<button onclick="testStack()">测试栈式操作</button>
</body>
</html>
(5) sort()
作用: 对先用数组进行排序;
默认情况下,按照元素的Unicode码进行排序(升序);
注意: 该函数会改变现有数组的内容;
允许通过自定义的排序函数来指定数字的排序规则;
语法: arr.sort(排序函数);
指定排序函数:
var nums = [2,1,8,43,55,98,11];
function sortAsc(a,b){
return b - a
}
nums.sort(sortAsc);
(6)进出栈操作;
栈式操作: 提供了快速操作数组头部或尾部的方法;
push() 入栈,向数组的尾部添加新元素,并返回新数组的长度;
names.push("ccccc") 等同于 names[names.length] = "ccccc"
pop() 出栈, 删除并返回数组尾部的元素;
unshift() 向数组的头部增加新元素并返回新数组的长度;
shift() 删除并返回数组头部的元素;
练习:
已知数组:
names = ["张无忌","张翠山"];
1、向names数组中追加 "张三丰",并打印追加后数组的长度
2、向names数组的头部,增加 "赵敏",并打印新数组长度
3、删除 names 中的最后一个元素 和 第一个元素
7, 二维数组;
概念: 什么是二维数组: 数组中的数组,在一个数组中的每个元素又是一个数组;
声明二维数组
var names = [
["贾1","王2","陈3"],
["李1","马2","白3"]
];
console.log(name[1][1])
三,字符串-string
(1)声明字符串:
var str1 = "字符串1"
var str2 = String("字符串2")
var str3 =new String("字符串3")
(2)length 属性
作用:返回当前字符串中字符的个数;
(3)常用函数--String API
<1> 大小写转换函数:
toUpperCase() 返回字符串的完全大写形式;
toLowerCase() 返回字符串的完全小写形式;
ex:
var str = "Hello World";
console.log(str.toUpperCase());
// HELLO WORLD
练习:
1、创建一个函数 testVilidateCode()
2、创建四位随机验证码
范围:0-9,A-Z,a-z
3、在弹框中弹出四位验证码,并让用户同时输入一段数据
4、忽略大小写比较生成的四位验证码 和 用户输入的数据
相等提示,验证成功
不相等提示,验证失败
<2> 获取指定位置的字符或Unicode码
1, charAt(index) 返回指定下标位置处的字符;
eg: var msg="Hello World";
var r = msg.charAt(6);
r = W
2, charCodeAt(index) 返回指定下标位置处的字符的Unicode码 (十进制)
var msg = "Hello World" ;
var r= msg.charCodeAt(6);
r :W 的ASCII 码
<3>,检索字符串
作用: 查询子字符串在指定字符串中的起始下标;
函数:1, indexOf(value, fromIndex)
value: 要查询的子字符串;
fromIndex : 从哪个位置处开始查,如果省略的话,则从头查找;
返回值: 返回第一次出现的子字符串的下标,如果未找到,则返回-1 ;
2, lastIndexOf(value, fromIndex)
作用: 查找value 最后一次出现的下标;
注意: 该函数的查找方式是从后向前找;
练习:
1、从弹框中输入一个邮箱
2、判断输入的数据是否满足邮箱的格式
1、字符串必须包含@
2、字符串必须包含.
3、最后一个.的位置必须要在@之后
<4> 截取子字符串
函数: substring(start,end)
作用: 返回从start 到end -1 之间的子字符串,如果省略end的话,则截取到末尾;
作业:
1、声明一个数组,内容随意
2、从弹框中录入一个数据
3、判断录入的数据是否出现在数组中
1、如果出现了的话,则打印数据的下标
2、如果未出现,则提示该数据不存在
最新文章
- 2 django系列之django分页与templatetags
- linux Mint 安装apache2
- div宽高设置为百分比
- C#入门基础三
- 简单PHP会话(session)说明
- C语言基础(不断更新)
- Web服务器与Servlet容器
- Building microservices with Spring Cloud and Netflix OSS, part 2
- Socket之UDP分包组包
- centos 5.x 升级openssl
- 【设计模式 - 24】之访问者模式(Visitor)
- OBIEE 缓存机制
- 微信小程序支付开发之申请退款
- 属性复制方法,当属性名字不一致时候可以传入匹配的Map
- 认证加密算法php hash_hmac和java hmacSha1的问题
- 测试思想-测试设计&#160;史上最详细测试用例设计实践总结&#160;Part2
- linux下php环境的装配以及php storm的链接
- MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体
- 使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象
- 微软Azure、谷歌GAE、亚马逊AWS比較
热门文章
- 获取上一页面url
- android git 过滤.idea文件时不起作用。
- (转)用库函数stdarg.h实现函数参数的可变
- Ubuntu连网的问题
- c语言判断闰年作业
- implode() 数组元素组合函数
- 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
- Python2.X和Python3.X中Tkinter模块的文件对话框、下拉列表的不同
- <;转载>; UE4的Actor类C++简单尝试
- swiper使用中一些点的总结