复习 - js基础语法
今天继续复习了js基础语法 最后一天了 学完了进入dom bom的复习 今天发现了很多经典案例 我都不知道一个随笔放的完不 逻辑性感觉还是蛮强的 主要就是作用域 对象 内置对象等一些的操作嘛 话不多说直接上代码 都在代码里了哈哈
首先是一个关于预解析的问题 感觉在这里有点小坑 以后要注意了
<!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>Document</title> </head> <body> <script> // 请描述下面代码的输出结果以及运行原因 var num = 1; function demo(){ console.log(num); function demoSon(){ console.log(num); num = 3; console.log(num);} var num = 2 demoSon();} demo(); // 很明显这是一个关于预解析的问题 就是会把变量声明和函数声明提升到当前作用域的最前面 那么全局作用域下声明了一个num 函数也声明了 在看函数里面的 // 注意!!! 这里第一步我就错了 我以为会打印1出来 局部作用域下先是打印num值 这里遵循一个作用域链的原则一级一级往上查找 找最近的一个找到过后 // 无论是否有值那都是他了 所以这里有个变量提升 提上来后未赋值 所以第一个num打印出来是undefined 后面继续遵循原则 依次打印出 2 3 </script> </body> </html>
然后是一个函数内置对象混用的问题 遇到的第一个有点挑战性的题
<!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>Document</title> </head> <body> <script> /* 函数名:getResult 函数调用方式:getResult(数值1,数值2,数值3,数值4.....) 函数功能:返回值是一个对象,这个对象有sum, max, min, averages等属性,分别表示实参的总和、最大值、最小值、平均数等 */ function getResult() { var sum = 0, max = arguments[0], min = arguments[0], averages = 0 for (k in arguments) { sum += arguments[k] if (arguments[k] > max) { max = arguments[k] } else if (arguments[k] < min){ min = arguments[k] } } averages = sum / arguments.length return { sum : sum, max : max, min : min, averages : averages } } console.log(getResult(1, 3, 10, 5)); // 我觉得这个题有点挑战 </script> </body> </html>
然后是一个日常觉得进步了的问题 以前做这个硬是没做出来 可能逻辑盘对了 但代码始终没放对位置
<!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>Document</title> </head> <body> <script> /* 以下有两个数组,一个数组arr是班级里所有的学员的名称,一个数组currentArr是提交了每日反馈的学员名单,请创建一种算法,把未提交每日反馈的学员筛选出来 */ var arr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗","王思聪", "张绿", "李德", "郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东","王可可" ,"陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"]; var currentArr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗", "张绿", "李德","郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东", "陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"]; var newArr = [] for (var i = 0; i < arr.length; i++) { if (flag) { newArr[newArr.length] = arr[i - 1] } var flag = true for (k in currentArr) { if (currentArr[k] === arr[i]) { flag = false break } } } console.log(newArr); // 这个题真的 很能看出些问题 我上一次做这个是想了一两天硬是做不出来 这一次再一做也花了点时间 四十分钟左右 但还好是做出来了 复习一次能看出我太太菜了 也变强了哈哈哈 </script> </body> </html>
来了 这个可能有点长 是一个关于字符串内置对象的一些操作 要动点小脑筋
<!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>Document</title> </head> <body> <script> /* 字符串:“abaasdffggghhjjkkgfddsssss3444343”,问题如下: 1、 字符串的长度 2、 取出指定位置的字符,如:0,3,5,9等 3、 查找指定字符是否在以上字符串中存在,如:i,c ,b等 4、 替换指定的字符,如:g替换为22,ss替换为b等操作方法 5、 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串 6、 找出以上字符串中出现次数最多的字符和出现的次数 7、 遍历字符串,并将遍历出的字符两头添加符号“@” */ var str = 'abaasdffggghhjjkkgfddsssss3444343' // 1. console.log(str.length); // 2. console.log(str.charAt(0)); console.log(str[3]); console.log(str.charCodeAt(5)); // 3. function getExist(x, str) { var flag = false for (var i = 0; i < str.length; i++) { if (str.charAt(i) == x) { flag = true break } } return flag } console.log(getExist('b', str)); // 4. str = str.replace('g', '22') str = str.replace('ss', 'b') console.log(str); // 5. console.log(str.substr(0, 5)); console.log(str.slice(0, 5)); // 6. var max = 0 var counts = 0 var temp var newArr = str.split('') for (var i = 0; i < newArr.length; i++) { counts = 0 for (var j = 1; j < newArr.length; j++) { if (newArr[i] == newArr[j]) { counts++ newArr.splice(j,1) } } if (counts > max) { max = counts temp = newArr[i] } } console.log(temp, max); // 这个题 十分的有挑战性 我感觉虽然做出来了 但代码有点冗余 但又找不到删减点 // 7. var newStr = '' for (var i = 0; i < str.length; i++) { newStr += str.substr(i, 1) newStr += '@' } newStr = '@' + newStr console.log(newStr); </script> </body> </html>
最后来一个经典题目随机数的一个应用 还有好多我没放上来 大多数是选了一些比较卡我的 我的代码肯定是有冗余的 但是我目前还是想不出更简单的方式 看有没与高人能帮我指出下
<!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>Document</title> </head> <body> <script> /* 从以下学员名单中随机选出4个学员: var arr = ["鹿晗","王俊凯","蔡徐坤","彭于晏","周杰伦","刘德华","赵本山"]; 注意:不要有重复的学员 */ var arr = ["鹿晗","王俊凯","蔡徐坤","彭于晏","周杰伦","刘德华","赵本山"] function getIntRandom(max, min) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } var newArr = new Array() var x = 6 for (var i = 0; i < 4; i++) { var temp = getIntRandom(0, x) newArr[newArr.length] = arr[temp] arr.splice(temp, 1) x-- } console.log(newArr); // 这个题也是当初卡了我很久 现在一做就很快做出来了 复习还是有用的 尽快复习完 马上进入新阶段了 </script> </body> </html>