JavaScript-内置对象练习

Math 对象

  1. 利用对象封装自己的数学对象 里面有 PI 最大值和最小值
var myMath = {
	PI: 3.141592653,
	max: function () {
		var max = arguments[0];
		for (var i = 1; i < arguments.length; i++) {
			if (arguments[i] > max) {
				max = arguments[i];
			}
		}
		return max;
	},
	min: function () {
		var max = arguments[0];
		for (var i = 1; i < arguments.length; i++) {
			if (arguments[i] < min) {
				min = arguments[i];
			}
		}
		return min;
	}
}
console.log(myMath.PI)
console.log(myMath.max(1, 5, 9))
  1. 猜数字游戏
    程序随机生成一个 1~ 10 之间的数字,并让用户输入一个数字,
    1. 如果大于该数字,就提示,数字大了,继续猜;
    2. 如果小于该数字,就提示数字小了,继续猜;
    3. 如果等于该数字,就提示猜对了, 结束程序。
function getRandom(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    var random = getRandom(1, 10);

    while (true) {  //死循环
        var num = prompt('你来猜?输入1-10之间的一个数字');
        if (num > random) {
            alert('数字大了,继续猜')
        } else if (num < random) {
            alert('数字小了,继续猜')
        } else {
            alert('猜对了!!!该数字是' + num)
            break
        }
    }

Date对象

  1. 制作一个端午节的倒计时(要熟练使用)
    分析:
  • 核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
  • 用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
  • 把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)
    转换公式如下:
    d = parseInt(总秒数/ 60/60 /24); // 计算天数
    h = parseInt(总秒数/ 60/60 %24) // 计算小时
    m = parseInt(总秒数 /60 %60 ); // 计算分数
    s = parseInt(总秒数%60); // 计算当前秒数

在JS界面:

function countDown(time) {
    var nowTime = +new Date()   //获取当前日期时间--->转换成毫秒
    var inputTime = +new Date(time)   //创建给定的日期时间对象

    var times = (inputTime - nowTime) / 1000   //将两个日期时间差转换成秒  除以1000-->毫秒转换成秒
    var d = parseInt(times / 60 / 60 / 24)
    d < 10 ? '0' + d : d
    var h = parseInt(times / 60 / 60 % 24)
    h < 10 ? '0' + h : h
    var m = parseInt(times / 60 % 60)
    m < 10 ? '0' + m : m
    var s = parseInt(times % 60)
    s < 10 ? '0' + s : s
    var str = d + '天' + h + '时' + m + '分' + s + '秒'

    // 通过id获取页面中的span标签,将倒计时字符串放到该标签中
    document.getElementById('mydate').innerHTML = str
    // 调用setTimeout函数(定时器函数),每隔1秒钟调用countDown函数,来实现倒计时
    setTimeout("countDown('2021-06-14')", 1000)
}
// console.log(countDown('2021-6-14'))

在HTML界面:

<body onload="countDown('2021-06-14')">
    <span id="mydate" style="color: red;font-size: 35px;"></span>
</body>
  1. 练习:“三天打鱼两天晒网” (要熟练使用)
    假设:2008-5-12某个人在打渔,那么今天他应该是打渔还是晒网
function countDown(time) {
    var nowTime = +new Date()
    var inputTime = +new Date(time)
    var times = (nowTime - inputTime) / 1000
    var d = parseInt(times / 60 / 60 / 24)
    if (d % 5 == 0 || d % 5 == 1 || d % 5 == 2) {
        return 1
    } else {
        return 0
    }
}
if (countDown('2008-05-12') == 1) {
    console.log('他今天应该打渔')
} else {
    console.log('他今天应该晒网')
}

Array对象

  1. 筛选数组 (要熟练使用)
    有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] < 2000) {
        newArr.push(arr[i]);
    }
}
console.log(newArr);
  1. 数组去重==(重点案例)==(要熟练使用)
    有一个数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’],要求去除数组中重复的元素。
    分析:
  • 目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个,放到新数组中去重。
  • 核心算法:遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过就添加,否则不添加。
  • 怎么知道该元素没有存在? 利用 新数组.indexOf(数组元素) 如果返回时 -1 就说明 新数组里面没有改元素
    旧数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’]
    新数组 [ ]
function unique(arr) {
	var newArr = [];
	for (var i = 0; i < arr.length; i++) {
		if (newArr.indexOf(arr[i]) === -1) {
			newArr.push(arr[i]);
		}
	}
	return newArr;
}
var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'])
console.log(demo)

在这里插入图片描述

String对象

  1. 统计出现最多的字符和次数 (要熟练使用)
    案例需求:使用charAt()方法通过程序来统计字符串中出现最多的字符和次数
var str = 'Apple'
// 1.统计每个字符出现的次数
var o = {}
for (var i = 0; i < str.length; i++) {
	var chars = str.charAt(i)  //利用chars保存字符串中的每一个字符
	if (o[chars]) {
		o[chars]++
	} else {
		o[chars] = 1
	}
}
// 2.统计出现最多的字符
var max = 0
var ch = ''
for (var k in o) {
	if (o[k] > max) {
		max = o[k]
		ch = k
	}
}
console.log('出现最多的字符是:' + ch + ',共出现了' + max + '次')
console.log(o)
  1. 输入一个由字母组成的字符串,统计串中每个字母出现的次数(用一维数组,每个数组单元对应每个字母出现的次数)(要熟练使用)
  • 串中包含有大写、小写字母
  • 定义两个数组:lower = new Array(26),upper = new Array(26)
var arr = prompt('请输入一个字符串:')
var newArr = []
// var a = []
for (var i = 0; i < arr.length; i++) {
    // var char = arr.charAt(i)

    for (var j = 0; j < a[i].length; j++) {
        if (a[j] == a[i]) {
            newArr[i] += 1
        } else {
            a[i] = arr[i]
            newArr[i] = 1
        }
    }
}
console.log(newArr)

var str = prompt('请输入一个字符串')
var lower = new Array(26)   //存放26个小写字母各自出现的次数
var upper = new Array(26)  //存放26个大写字母各自出现的次数

// 初始化两个数组
for (var i = 0; i < 26; i++) {
    lower[i] = 0
    upper[i] = 0
}
// 对输入的字符串进行遍历
for (var k = 0; k < str.length; k++) {
    if (str.charAt(k) >= 'a' && str.charAt(k) <= 'z') {   //判断取出的字母是不是在小写字母的范围内
        lower[str.charCodeAt(k) - 97]++   //a的ascll码值为97,取索引为k的ascll码值
    } else if (str.charAt(k) >= 'A' && str.charAt(k) <= 'Z') {  //大写字母
        upper[str.charCodeAt(k) - 65]++
    }
}
console.log(lower)
console.log(upper)

var str = prompt('请输入一个字符串')
var lower = new Array(26)
var upper = new Array(26)

for (var i = 0; i <= 26; i++) {
    if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
        lower[str.charCodeAt(i) - 97]++
    } else if (str.charAt(i) >= 'A' &&)
}
  1. 输入一个十进制的整数和一个数制(2或8或16),将该十进制的整数转换成对应的数制格式输出 (要熟练使用)
    取余法:来求得数制转换中的余数
    例:m=15 k=8
    m%k 将余数存放在数组中
var m = parseInt(prompt('请输入一个整数:'))
var k = parseInt(prompt('请输入一个数制(2~16):'))
// 字符数组
var result = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
var arr = new Array(128)   //可以改,比如十进制转成二进制最多可以转128位,存放数制转换的结果

var i = 0
while (m != 0) {    //对m进行数制转换,将余数放在arr数组中
    arr[i] = m % k
    m = parseInt(m / k)
    i++
}

var str = ''
if (k == 8) {
    str = '0'  //初始化放进去一个0
} else if (k == 16) {
    str = '0x'
}
for (var j = i - 1; j >= 0; j--) {    //因为i表示arr数组的长度,故表示下标时要-1
    str += result[arr[j]]   //将arr数组的元素作为result数组的下标/索引
}

console.log('转换的结果为:' + str)
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值