【JavaScript】5.JavaScript内置对象
JavaScript 内置对象
- JavaScript 中的对象分为3种
- 自定义对象
- 内置对象
- 浏览器对象
前面两种对象是JS 基础 内容,属于 ECMAScript; 第三个浏览器对象属于JS 独有的
内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
内置对象最大的优点就是帮助快速开发
JavaScript 提供了多个内置对象:Math、 Date 、Array、String等
1. Math对象
Math 对象不是构造函数,它具有数学常数和函数的属性和方法
跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员
1.1 Math数学对象
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Math数学对象</title><script>console.log('圆周率:' + Math.PI);console.log('3.7 向下取整:' + Math.floor(3.7));console.log('3.4 向下取整:' + Math.floor(3.4));console.log('3.4 向上取整:' + Math.ceil(3.4));console.log('3.7 向上取整:' + Math.ceil(3.7));console.log('-3.4 四舍五入版 就近取整:' + Math.round(-3.4)); // -3console.log('-3.5 四舍五入版 就近取整:' + Math.round(-3.5)); // 注意 -3.5 结果是 -3 console.log('-3.6 四舍五入版 就近取整:' + Math.round(-3.6)); // -4console.log('-3 绝对值:' + Math.abs(-3));console.log('3 绝对值:' + Math.abs(3));console.log('10, 20, 30 最大值 ' + Math.max(10, 20, 30));console.log('10, 20, 30 最小值 ' + Math.min(10, 20, 30));</script>
</head><body>
</body></html>
1.2 封装自己的数学对象
利用对象封装自己的数学对象 里面有 PI 最大值和最小值
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>封装自己的数学对象</title><script>var myMath = {PI: 3.141592653,myMax: function() {var max = arguments[0];for (var i = 1; i < arguments.length; i++) {if (arguments[i] > max) {max = arguments[i];}}return max;},myMin: function() {var min = 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.myMax(1, 5, 9));console.log(myMath.myMin(1, 5, 9));</script>
</head>
<body><!-- 利用对象封装自己的数学对象 里面有 PI 最大值和最小值 -->
</body>
</html>
1.3 随机数方法 random()
random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1
得到一个两数之间的随机整数,包括两个数在内
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>随机数方法 random()</title><script>// Math对象随机数方法 random() // 返回一个随机的小数 0 =< x < 1console.log(Math.random());// 得到一个两数之间的随机数// 这个值不小于 min(有可能等于),并且小于(不等于)maxfunction getRandomArbitrary(min, max) {return Math.random() * (max - min) + min;}console.log(getRandomArbitrary(1, 8));// 得到一个两数之间的随机整数// 这个值不小于 min (如果 min 不是整数,则不小于 min 的向上取整数),且小于(不等于)maxfunction getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值}console.log(getRandomInt(1, 5));// 得到一个两数之间的随机整数,包括两个数在内// Math.floor(Math.random() * (max - min + 1)) + min;function getRandomIntInclusive(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值}console.log(getRandomIntInclusive(1, 20));// 随机点名var arr = ['zs', 'ls', 'ww', 'zl', 'sq', 'zb', 'wj', 'zs'];console.log(arr[0]);console.log(arr[getRandomIntInclusive(0, arr.length - 1)]);</script>
</head><body></body></html>
1.4 猜数字游戏
程序随机生成一个 1~ 10 之间的数字,并让用户输入一个数字
- 如果大于该数字,就提示,数字大了,继续猜
- 如果小于该数字,就提示数字小了,继续猜
- 如果等于该数字,就提示猜对了, 结束程序
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>猜数字游戏</title><script>// 猜数字游戏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('猜对了');break; // 退出整个循环结束程序}}</script>
</head><body></body></html>
2. 日期对象
Date 对象是构造函数,需要实例化后才能使用
Date 实例用来处理日期和时间
2.1 Date() 方法的使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Date()方法的使用</title><script>// 使用Date 如果没有参数 返回当前系统的当前时间var date1 = new Date();console.log(date1);// 参数常用的写法 数字型var date2 = new Date(2019, 9, 1);console.log(date2); // 返回的是 10月 不是 9月var date3 = new Date(2019, 1, 1);console.log(date3); // 返回的是 2月 不是 1月var date4 = new Date(2019, 12, 1);console.log(date4); // 返回的是 2020 年的 1 月 不是 2019 年 12 月// 参数常用的写法 字符串型var date5 = new Date('2019-10-1 8:8:8');console.log(date5);</script>
</head>
<body></body>
</html>
2.2 日期格式化
方法名 | 说明 |
---|---|
getFullYear | 获取当年 |
getMonth | 获取当月(0-11) |
getDate() | 获取当天日期 |
getDay() | 获取星期几(周日0到周六6) |
getHours() | 获取当前小时 |
getMinutes() | 获取当前分钟 |
getSeconds() | 获取当前秒钟 |
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>日期格式化</title><script>// 日期格式化var date = new Date();console.log('获取当年:' + date.getFullYear());console.log('获取当月(0-11):' + date.getMonth());console.log('获取当天日期:' + date.getDate());console.log('获取星期几(0-6):' + date.getDay()); // 周日返回的是 0console.log('获取当前小时:' + date.getHours());console.log('获取当前分钟:' + date.getMinutes());console.log('获取当前秒钟:' + date.getSeconds());</script>
</head>
<body></body>
</html>
2.3 输出当前日期
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>输出当前日期</title><script>// 输出当前日期var date = new Date(2019, 7, 8);var year = date.getFullYear();var month = date.getMonth() + 1;var dates = date.getDate();var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];var day = date.getDay();console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);</script>
</head>
<body></body>
</html>
2.4 输出当前时间
写一个函数,格式化日期对象,成为 HH:mm:ss 的形式 比如 00:10:45
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>输出当前时间</title><script>// 格式化日期 时分秒var date = new Date();console.log(date.getHours()); // 时console.log(date.getMinutes()); // 分console.log(date.getSeconds()); // 秒// 要求封装一个函数返回当前的时分秒 格式 08:08:08function ifda(params) {params = params < 10 ? '0' + params : params;return params}function nowTime() {var hours = date.getHours();var minutes = date.getMinutes();var seconds = date.getSeconds();return ifda(hours) + ' : ' + ifda(minutes) + ' : ' + ifda(seconds);}console.log(nowTime());</script>
</head><body></body></html>
2.5 获得Date总的毫秒数
Date 对象是基于1970年1月1日(世界标准时间)起的毫秒数
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>获得Date总的毫秒数</title><script>// 获得Date总的毫秒数(时间戳) 不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒数// 通过 valueOf() getTime()var date = new Date();console.log(date.valueOf()); // 就是 现在时间 距离1970.1.1 总的毫秒数console.log(date.getTime());// 简单的写法 (最常用的写法)var date1 = +new Date(); // +new Date() 返回的就是总的毫秒数console.log(date1);// H5 新增的 获得总的毫秒数console.log(Date.now());</script>
</head><body></body></html>
2.6 倒计时效果
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>倒计时效果</title><script>// 倒计时效果// 1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。// 2.用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。// 3.把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)// 转换公式如下: // d = parseInt(总秒数/ 60/60 /24); // 计算天数// h = parseInt(总秒数/ 60/60 %24) // 计算小时// m = parseInt(总秒数 /60 %60 ); // 计算分数// s = parseInt(总秒数%60); // 计算当前秒数function countDown(time) {var nowTime = +new Date(); // 返回的是当前时间总的毫秒数var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数 var d = parseInt(times / 60 / 60 / 24); // 天d = d < 10 ? '0' + d : d;var h = parseInt(times / 60 / 60 % 24); //时h = h < 10 ? '0' + h : h;var m = parseInt(times / 60 % 60); // 分m = m < 10 ? '0' + m : m;var s = parseInt(times % 60); // 当前的秒s = s < 10 ? '0' + s : s;return d + '天' + h + '时' + m + '分' + s + '秒';}console.log(countDown('2023-2-16 18:00:00'));var date = new Date();console.log(date);</script>
</head><body></body></html>
3. 数组对象
3.1 创建数组的两种方式
- 创建数组的两种方式
- 利用数组字面量
- 利用new Array()
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>创建数组的两种方式</title><script>// 创建数组的两种方式// 利用数组字面量var arr = [1, 2, 3];console.log(arr[0]);// 利用new Array()var arr1 = new Array(); // 创建了一个空的数组console.log(arr2);var arr2 = new Array(2); // 这个2 表示 数组的长度为 2 里面有2个空的数组元素 console.log(arr2);var arr3 = new Array(2, 3); // 等价于 [2,3] 这样写表示 里面有2个数组元素 是 2和3console.log(arr3);</script>
</head><body></body></html>
3.2 检测是否为数组方法
- instanceof 运算符,可以判断一个对象是否属于某种类型
- Array.isArray() 用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>检测是否为数组方法</title><script>var arr = [1, 23];var obj = {};// instanceof 运算符 它可以用来检测是否为数组console.log(arr instanceof Array); // trueconsole.log(obj instanceof Array); // false// Array.isArray(参数); H5新增的方法 ie9以上版本支持console.log(Array.isArray(arr)); // trueconsole.log(Array.isArray(obj)); // false// 翻转数组function reverse(arr) {// if (arr instanceof Array) {if (Array.isArray(arr)) {var newArr = [];for (var i = arr.length - 1; i >= 0; i--) {newArr[newArr.length] = arr[i];}return newArr;} else {return 'error 这个参数要求必须是数组格式 [1,2,3]'}}console.log(reverse([1, 2, 3]));console.log(reverse(1, 2, 3));</script>
</head><body></body></html>
3.3 13-添加删除数组元素方法
方法名 | 参数 | 说明 | 返回值 |
---|---|---|---|
push() | 有 | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
unshift() | 有 | 向数组的开头添加一个或更多元素,注意修改原数组 | 并返回新的长度 |
pop() | 无 | 删除数组最后一个元素,把数组长度减1、修改原数组 | 并返回删除的元素的值 |
shift() | 无 | 删除数组的第一个元素,数组长度减1、修改原数组 | 并返回第一个元素的值 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>添加删除数组元素方法</title><script>// 添加删除数组元素方法// push() 在数组的末尾 添加一个或者多个数组元素 push 推var arr1 = [1, 2, 3];// push() 参数直接写 数组元素就可以了arr1.push(4, 'ich');console.log('arr1 = [' + arr1 + ']');var arr2 = [1, 2, 3];// push完毕之后,返回的结果是 新数组的长度 console.log('arr2.length = ' + arr2.push(4, 'ich'));// 原数组也会发生变化console.log('arr2 = [' + arr2 + ']');var arr3 = [1, 2, 3];// unshift 在数组的开头 添加一个或者多个数组元素// unshift() 参数直接写 数组元素就可以了arr3.unshift(0);console.log('arr3 = [' + arr3 + ']');// unshift完毕之后,返回的结果是 新数组的长度 console.log('arr3.length = ' + arr3.unshift('red', 'purple'));// 原数组也会发生变化console.log('arr3 = [' + arr3 + ']');// pop() 可以删除数组的最后一个元素var arr4 = [1, 2, 3, 5, 'ich'];// pop是可以删除数组的最后一个元素 一次只能删除一个元素// pop() 没有参数arr4.pop();// pop完毕之后,返回的结果是 删除的那个元素 console.log('arr4 = [' + arr4 + ']');console.log(arr4.pop());// 原数组也会发生变化console.log('arr4 = [' + arr4 + ']');// shift() 它可以删除数组的第一个元素var arr5 = [1, 2, 3, 5, 'ich'];// shift是可以删除数组的第一个元素 一次只能删除一个元素// shift() 没有参数arr5.shift();console.log('arr5 = [' + arr5 + ']');// shift完毕之后,返回的结果是 删除的那个元素console.log(arr5.shift());// 原数组也会发生变化console.log('arr5 = [' + arr5 + ']');</script>
</head><body></body></html>
3.4 筛选数组
有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>筛选数组</title><script>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 = [' + newArr + ']');</script>
</head>
<body><!-- 有一个包含工资的数组[1500, 1200, 2000, 2100, 1800]要求把数组中工资超过2000的删除,剩余的放到新数组里面-->
</body>
</html>
3.5 数组排序
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组返回新数组 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组排序</title><script>// 翻转数组var arr = ['red', 'yellow', 'green'];arr.reverse();console.log(arr);// 数组排序(冒泡排序)var arr1 = [13, 4, 77, 1, 7];arr1.sort(function (a, b) {return a - b; // 升序的顺序排列});console.log('arr1 = [' + arr1 + ']');var arr2 = [13, 4, 77, 1, 7];arr2.sort(function (a, b) {return b - a; // 降序的顺序排列});console.log('arr2 = [' + arr2 + ']');</script>
</head><body></body></html>
3.6 数组索引方法
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号如果不存在,则返回 -1 |
lastIndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号如果不存在,则返回 -1 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>获取数组元素索引方法</title><script>var arr1 = ['red', 'green', 'yellow'];console.log(arr1.indexOf('green')); // 1console.log(arr1.indexOf('blue')); // -1var arr2 = ['red', 'green', 'blue', 'yellow', 'blue'];console.log(arr2.lastIndexOf('blue')); // 4console.log(arr2.indexOf('gray')); // -1</script>
</head><body></body></html>
3.7 数组去重
有一个数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’],要求去除数组中重复的元素
- 分析:
- 遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过,就添加,否则不添加
- 利用 新数组.indexOf(数组元素) 如果返回时 -1 就说明 新数组里面没有该元素
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组去重</title><script>var arr1 = ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'];var arr2 = [];for (var i = 0; i < arr1.length; i++) {if (arr2.indexOf(arr1[i]) == -1) {arr2.push(arr1[i]);}}console.log('arr1 = [' + arr1 + ']');console.log('arr2 = [' + arr2 + ']');</script>
</head><body><!-- 数组去重 --><!-- 有一个数组['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'],要求去除数组中重复的元素 -->
</body></html>
3.8 数组转换为字符串
方法名 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换成字符串,逗号分隔每一项 | 返回一个字符串 |
join(‘分隔符’) | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组转换为字符串</title><SCript>// 数组转换为字符串 // toString() 将数组转换为字符串var arr = [1, 2, 3];console.log(arr.toString()); // 1,2,3// join(分隔符) ,把数组中的所有元素转换为一个字符串var arr1 = ['green', 'blue', 'red'];console.log(arr1.join()); // green,blue,redconsole.log(arr1.join('-')); // green-blue-redconsole.log(arr1.join('&')); // green&blue&red</SCript>
</head>
<body></body>
</html>
3.9 数组连接
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组连接</title><script>var arr1 = [1, 2, 3];var arr2 = [4, 5, 6];var arr3 = arr1.concat(arr2);console.log('arr3 = [' + arr3 + ']');</script>
</head><body></body></html>
3.10 数组截取
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组截取</title><script>var arr1 = [1, 2, 3, 4, 5, 6];var arr2 = [];var arr2 = arr1.slice(2, 5);console.log('arr2 = [' + arr2 + ']');</script>
</head><body></body></html>
3.11 数组删除
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组删除</title><script>var arr1 = [1, 2, 3, 4, 5, 6];var arr2 = [];var arr2 = arr1.splice(2, 5);console.log('arr1 = [' + arr1 + ']');console.log('arr2 = [' + arr2 + ']');</script>
</head><body></body></html>
4. 字符串对象
4.1 基本包装类型
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>基本包装类型</title><script>// JavaScript 提供了三个特殊的引用类型:String、Number和 Booleanvar str = new String('ich');console.log('str = ' + str);var a = new Number('123'); // a === 123 is falsevar b = Number('123'); // b === 123 is trueconsole.log(a instanceof Number); // trueconsole.log(b instanceof Number); // falselet t = new Boolean(true);console.log(t); //Boolean{true}var str = 'andy';console.log(str.length);// 对象 才有 属性和方法 复杂数据类型才有 属性和方法 // 简单数据类型为什么会有length 属性呢? // 基本包装类型: 就是把简单数据类型 包装成为了 复杂数据类型 // (1) 把简单数据类型包装为复杂数据类型 var temp = new String('andy');// (2) 把临时变量的值 给 strstr = temp;// (3) 销毁这个临时变量temp = null;</script>
</head><body></body></html>
4.2 字符串的不可变
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>字符串的不可变</title><script>var str = 'andy';console.log(str); // andystr = 'red';console.log(str); // red// 因为字符串的不可变所以不要大量的拼接字符串var str = '';for (var i = 1; i <= 1000000000; i++) {str += i;}console.log(str); // Uncaught RangeError: Invalid string length(字符串长度无效)</script>
</head>
<body><!-- 字符串的不可变:指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间-->
</body>
</html>
4.3 根据字符返回位置
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
方法名 | 说明 |
---|---|
indexOf(‘要查找的字符’,开始的位置) | 返回指定内容在元字符串中的位置,如果找不到就返回-1,开始的位置是index索引号 |
lastlndexOf() | 从后往前找,只找第一个匹配的 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>根据字符返回位置</title><script>var str = '如果,樱花掉落的速度是每秒五厘米,那么两颗心需要多久才能靠近?';console.log(str.indexOf('五')); // 13console.log(str.indexOf('五', 6)); // 13console.log(str.lastIndexOf('五')); // 13console.log(str.lastIndexOf('五', 30)); // 13</script>
</head><body></body></html>
4.4 根据字符返回位置练习
查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
核心算法:先查找第一个o出现的位置
然后 只要indexOf 返回的结果不是 -1 就继续往后查找
因为indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>根据字符返回位置</title><script>// 查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数// 核心算法:先查找第一个o出现的位置// 然后 只要indexOf 返回的结果不是 -1 就继续往后查找// 因为indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找var str = 'abcoefoxyozzopp';var index = str.indexOf('o');var num = 0;var indexs = 0;while (index !== -1) {indexs = index;console.log('indexs = ' + indexs);num++; index = str.indexOf('o', index + 1);}console.log('num = ' + num);// -------------- lastIndexOf --------------var str1 = 'abcoefoxyozzopp';var index1 = str1.lastIndexOf('o', str1.length);var num1 = 0;var indexs = 0;// console.log(index1);while (index1 !== -1) {indexs = index1;console.log('indexs = ' + indexs);num1++;index1 = str1.lastIndexOf('o', index1 - 1);}console.log('num1 = ' + num1);</script>
</head><body><!-- 查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数 -->
</body></html>
4.5 根据位置返回字符
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCIl码(index索引号) | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | HTML5,IE8+支持和charAt()等效 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>根据位置返回字符</title><script>var str = 'asdfghjkl';console.log(str.charAt(0));console.log(str.charAt(5));// 遍历所有的字符for (var i = 0; i < str.length; i++) {console.log(str.charAt(i));}// charCodeAt(index) 返回相应索引号的字符ASCII值// 目的: 判断用户按下了那个键 console.log(str.charCodeAt(0)); // 97console.log(str.charCodeAt(5)); // 104console.log(str[0]);console.log(str[5]);</script>
</head><body></body></html>
4.6 根据位置返回字符练习
核心算法:利用 charAt() 遍历这个字符串
把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1
遍历对象,得到最大值和该字符
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>根据位置返回字符练习</title><script>// 核心算法:利用 charAt() 遍历这个字符串// 把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1// 遍历对象,得到最大值和该字符var str = 'abcoefoxyozzopp';var o = {};for (var i = 0; i < str.length; i++) {var chars = str.charAt(i); // chars 是 字符串的每一个字符if (o[chars]) { // o[chars] 得到的是属性值o[chars]++;} else {o[chars] = 1;}}console.log(o);// 2. 遍历对象var max = 0;var ch = '';for (var k in o) {// k 得到是 属性名// o[k] 得到的是属性值if (o[k] > max) {max = o[k];ch = k;}}console.log(max);console.log('最多的字符是' + ch);</script>
</head><body><!-- 判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数 -->
</body></html>
4.7 字符串操作方法
方法名 | 说明 |
---|---|
concat(str1,str2,str3…) | concat()方法用于连接两个或多个字符串;拼接字符串,等效于+,+更常用 |
substr(start,length) | 从start位置开始(索引号), length 取的个数 |
slice(start, end) | 从start位置开始,截取到end位置,end取不到(start、end都是索引号) |
substring(start, end) | 从start位置开始,截取到end位置,end取不到基本和slice相同但是不接受负 |
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>字符串操作方法</title><script>var str1 = 'asdf';var str2 = 'ghjkl';var str3 = str1.concat(str2);console.log('str3 = ' + str3); // str3 = asdfghjklconsole.log('substr ' + str3.substr(3, 3)); // substr fghconsole.log('slice ' + str3.slice(3, 6)); // slice fghconsole.log('slice ' + str3.slice(3, -2)); // slice fghjconsole.log('substring ' + str3.substring(3, 6)); // substring fghconsole.log('substring ' + str3.substring(3, -2)); //substring asd</script>
</head><body></body></html>
4.8 replace() 方法
replace() 方法用于在字符串中用一些字符替换另一些字符
语法:replace(被替换的字符串, 要替换为的字符串);
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>replace()方法</title><script>// replace() 方法用于在字符串中用一些字符替换另一些字符// replace(被替换的字符串, 要替换为的字符串);var str = 'aaaxxxbbb';console.log(str.replace('x', '!'));console.log(str.replace('xx', '!!'));console.log(str.replace('xxx', '!!!'));</script>
</head><body></body></html>
4.9 split() 方法
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>split()方法</title><script>// split()方法用于切分字符串,它可以将字符串切分为数组// 在切分完毕之后,返回的是一个新数组var str = 'a,b,c,d';console.log(str.split(',')); // 返回的是一个数组 [a, b, c, d]</script>
</head><body></body></html>
4.10 转换大小写
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>转换大小写</title><script>var str = 'aaa';console.log(str.toUpperCase()); // 转换大写var str = 'AAA';console.log(str.toLocaleLowerCase()); // 转换小写</script>
</head><body></body></html>
GitHub代码
gitee代码