今天繼續複習了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>