C1 能力認證——JS基礎

HammerZe發表於2022-02-19

C1 能力認證——JS基礎

image

JavaScript變數命名規則

在JavaScript中以下,以下哪些變數名是非法的(會導致程式報錯)?

1person 
name 
var 
$orderwera23 
uiuiuqwer4_23aser2

1person var 
# 不能以數字開頭,和關鍵字命名
在JavaScript中,以下哪些變數名不建議使用?

1person 
name 
var 
$orderwera23 
uiuiuqwer4_23aser2

iperson var $orderwera23 uiuiuqwer4_23aser2
# 不能以數字開頭和關鍵字命名,且必須見名知意
在JavaScript中,以下字串中那些不能被作為變數名使用?(使用了,程式就會報錯)

for 
function 
var 
myName 
owefsdfwef2

for function var
# 使用了關鍵字
在JavaScript中,以下程式碼執行會報錯

var 1_person = "Hello world!"
console.log(1_person)

對
# 變數名錯誤,數字開頭
在JavaScript中,從程式碼易於維護的角度來看,以下哪些變數名比較合適?

a1
b2
n234oouj
name
number
age
schoolName

name number age schoolName
# 這些變數名定義做到了見名知意

邏輯運算

要想以下JavaScript程式碼符合預期,空格處應該填什麼運算子?

var a = 11
var b = 6
if(__(a<b)) {
    console.log(a)
} else {
    console.log(b)
}
預期輸出結果:
11

!
# 結果輸出的是11,也就是執行了console.log(a)語句,條件為true,反推那麼a<b為false取反就行,所以填!

以下JavaScript程式碼執行的預期輸出結果是?

var num = 55
var str = "55"
if(num === str) {
    console.log("Yes")
} else {
    console.log("No")
}
預期輸出結果:
____
No
# ===這個是恆等於,要求變數型別和值都相等,顯然型別不同
以下JavaScript程式碼執行的預期輸出結果是?

var res1 = 5 > 8
var res2 = true
if(res1 && res2) {
    console.log("Yes")
} else {
    console.log("No")
}
預期輸出結果:
____
No
# &&表示與操作,該符號兩邊都為true才為true,顯然res1結果為false
以下JavaScript程式碼執行的預期輸出結果是?

var res1 = 6 > 3
var res2 = 8 >= 8
var res3 = false
if(res1 || res2 && res3) {
    console.log("Yes")
} else {
    console.log("No")
}
預期輸出結果:
____
Yes
# 優先順序的問題,變數res1是表示式5 > 8的結果,即為false。變數res2為true。然後對res1和res2進行與操作,因為res1為false,所以res1 && res2的結果也為false。與運算,當其中任何一個運算元為false時,該運算的結果為false,只有當兩個運算元都為true時,其運算結果才為true
以下JavaScript程式碼執行的預期輸出結果是?

var num = 8
if(true || (num = 9)) {
    console.log(num)
}

預期輸出結果:
____
8
# 這裡涉及到邏輯運算的短路機制,對於或運算,當第一個運算元是true時,該運算的結果是true,第二個運算元不會被求值(如果是表示式的話就不會被執行)

隱式型別轉換

以下程式碼的預期輸出是?

var arr = [] 
var str 
if (arr) { 
    str = 'hello' 
} 
console.log(str) 

預期輸出: 
____
hello
# 空陣列轉換成布林值為true,所以變數str會被賦值為hello
# 非空即為真 非0即為真
'''
字串:非空即為真
數字:非0非NAN即為真
物件:非null非undefined即為真
[]{}為真
'''
要想是一下JavaScript程式碼執行符合預期,空格處應該填什麼運算子?

var a = true 
var b = 2 
var c = a ___ b 
console.log(c) 

預期輸出: 
2
*
# 這裡輸出2,只有b的值為2那麼c只能等於a*b,a=true就唄隱式轉換為1,所以c=1*2
以下JavaScript程式碼執行的預期輸出結果是?

var res = 567 + '1' - 89
console.log(res) 

預期輸出: 
____
5582
# 數字型別和字串中間的+號不再是加法運算,而是拼接,數值型別被轉換成字串型別,567+'1'=5671,然後5671-89
以下JavaScript程式碼執行的預期輸出結果是?

if (null) {
    console.log('Hello')
} else {
    console.log('World')
}

預期輸出: 
____
World
# 非空就是真
以下JavaScript程式碼執行的預期輸出結果是?

var a = {}
if (a) {
    console.log('Hello')
} else {
    console.log('World')
}

預期輸出: 
____
Hello
# 自定義物件為空也為真

條件分支

以下JavaScript程式碼的預期輸出是?

var a = 8 
if (a > 7) { 
    a = 3 
} 
if (a > 4) { 
    a = 5 
} 
console.log(a)
3
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var expr = ____ 
switch (expr) { 
    case 1: 
        // 程式碼塊1 
        console.log(111); 
    case 2: 
        // 程式碼塊2 
        console.log(222); 
    case 3: 
        // 程式碼塊3 
        console.log(333); 
        break;  
    case 5: 
        // 程式碼塊5 
        console.log(111); 
    case 6: 
        // 程式碼塊6 
        console.log(222); 
        break; 
    default: 
        // 程式碼塊7 
        console.log(111); 
}
預期輸出: 
111
222

5
# 這裡填5,因為break再6後面,然後輸出的是5和6中的內容
以下JavaScript程式碼執行的預期輸出結果是?

var num = 89
if (num < 89) {
    console.log('a')
} else if (num > 89) {
    console.log('b')
} else {
    console.log('c')
}
預期輸出: 
____
c
# 條件判斷都不滿足,輸出else下的內容
以下JavaScript程式碼執行的預期輸出結果是?

if (8 > 7) {
    console.log('Hello')
} else {
    console.log('World')
}
預期輸出: 
____
Hello
以下JavaScript程式碼執行的預期輸出結果是?

if (78 < 67) {
    if (45 > 23) {
        console.log('a')
    } else {
        console.log('b')
    }
} else {
    if (89 > 45) {
        console.log('c')
    } else {
        console.log('d')
    }
}
預期輸出: 
____
c

For迴圈

想要以下程式碼執行符合預期則空格處應該填什麼整型數字?

for (var i=0; i <= ___; i++) {
    console.log(i)
}
預期輸出結果: 0 1 2 3 4 5 
5
# 結果包含5,那麼條件判斷只能填5
想要以下程式碼執行符合預期則空格處應該填什麼整型數字?

for (var i=1; i <= ___; i+=1) {
    console.log(i)
} 
預期輸出結果:1 2 3 4 5 6 7 8 9
9
# 結果包含9,條件判斷填9
想要以下程式碼執行符合預期則空格處應該填什麼整型數字?

var arr = ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']
for (var i=0; i < arr.length; i+=___) {
    console.log(arr[i])
}
預期結果:a1 d1 g1
3
# 根據結果發現,間隔為3
想要以下程式碼執行符合預期則空格處應該填?

var obj = {
    realName:'張三', 
    phone:13344556789, 
    email:'zhangsan@163.com',
    created_at:'2021-06-12 10:00:00'
}
for (var k in obj) {
    if(k === _______ ){
        console.log(obj[k])
    }
}
預期結果:zhangsan@163.com

email
# k恆等於email才能取到email的值
想要以下程式碼執行符合預期則空格處應該填什麼整數?

for (var i=4; i<9; i+=___) {
    console.log(i)
}
預期輸出: 
4
7

3
# 根據結果發現,間隔為3

Math內建物件

方法名稱 作用 示例 結果
max() 用於確定一組數值中的最大值 Math.max(11,3,17,6) 17
min() 用於確定一組數值中的最小值 Math.min(11,3,17,6) 3
ceil() 執行向上取整,即它總是將數值向上取整為最接近的整數 Math.ceil(25.1) 26
floor() 執行向下取整,即它總是將數值向下取整為最接近的整數 Math.floor(25.8) 25
round() 執行標準取整,即它總是將數值四捨五入為最接近的整數 Math.round(25.8) 26
random() 該方法返回介於 0 到 1 之間一個隨機小數,包括 0 和不包含 1 Math.random() 例如0.3123868992708143
abs() 該方法返回引數的絕對值 Math.abs(-9) 9
sqrt() 該方法返回引數的平方根 Math.sqrt(49) 7
表示式 Math.____(13.6589)計算結果為13,則空格處應該填?
floor
# 結果是取整了,而且還是向下取整,所以填13
# 如果結果為14,那麼方法就是ceil
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?(使用中文逗號「,」隔開)

var a = -14.4
var b = 10
var c = Math.____ (a*b)
var d = Math.____ (c)
console.log(d)
預期輸出結果:
12

abs,sqrt
# 結果為正,首先將負數取絕對值,填abs,然後c=144,那麼c開平方就是12,填sqrt
要想以下JavaScript程式碼符合預期,空格處應該填什麼整數?

console.log(Math.sqrt(____))
預期輸出結果:
9

81
# 81開平方得9
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

console.log(Math.____(3, 4, 89))
預期輸出結果:
89

max
# 輸出了最大值填max
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

console.log(Math.____(8.01))
預期輸出結果:
9
ceil
# 結果是向上取整了,填ceil

物件屬性

  • 考點是物件取值
    • 點方法取值
    • obj[屬性]取值
    • 索引取值
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var obj = {name: 'lisi', city: '北京', age: 21}
console.log(obj._______)

// 預期輸出結果:21
age
要想以下JavaScript程式碼符合預期,空格處應該填什麼字串?

var obj = {id: 1, title: 'React-JSX語法', lengtth: "120", created_at: "2021-07-01", created_staf: "張三"}
var adminName = '_______'
console.log(obj[adminName])
預期輸出結果:
張三

created_staf
要想以下JavaScript程式碼符合預期,空格處應該填什麼?

var obj = {
    name: '李四',
    school: '北京大學',
    age: 23
}
console.log(obj.____)
預期輸出結果:
北京大學

school
要想以下JavaScript程式碼符合預期,空格處應該填什麼整數?

var obj = {
    name: '王五',
    friends: ['張三', '李四'],
    age: 23
}

console.log(obj.friends[____])
預期輸出結果:
李四

1
要想以下JavaScript程式碼符合預期,空格處應該填什麼?

var obj = {
    name: '小明',
    friends: ['張三', '李四'],
    hobby: ['籃球', '足球', '游泳', '看書'],
    age: 23
}

console.log(obj.name + '喜歡' + obj.____[1])

預期輸出結果:
小明喜歡足球

hobby

函式定義與呼叫

要想以下JavaScript程式碼符合預期,空格處應該填什麼整型數字?

function foo(a, b) { 
    return a * b 
} 
console.log(foo(8, ___)) 
預期輸出: 
32

4
要想以下JavaScript程式碼符合預期,空格處應該填什麼整型數字?

function foo(a) { 
    return a * a * a 
} 
console.log(foo(___)) 
預期輸出: 
27

3
要想以下JavaScript程式碼符合預期,空格處應該填什麼?

var obj = {
    name: '小明',
    friends: ['張三', '李四'],
    hobby: ['籃球', '足球', '游泳', '看書'],
    age: 23,
    getNewFriend: function (newFriend) {
        this.friends.push(newFriend)
    }
}

obj._______('王五')

console.log(obj.friends[2])

預期輸出: 
王五

getNewFriend
# 這裡定義了一個obj物件,其中一個屬性的值是一個函式,那麼在取這個屬性值的時候,後面加上()就代表呼叫這個函式。這個函式(我們可以稱之為這個物件的方法)的作用是將它的引數追加到該物件的friends屬性值(陣列)的末尾。我們看預期輸出的列印是obj這個物件的friends屬性值的索引為2的值,而friends屬性在這個物件被定義的時候最大索引是1,顯然它被push進了一個值。由此可知空格處該填什麼了。
以下的JavaScript程式碼的預期輸出是?

var checkNum = function (num) {
    return num % 2 === 0
}
if (checkNum(8)) {
    console.log('Hello')
} else {
    console.log('World')
}

預期輸出: 
____

Hello
以下的JavaScript程式碼的預期輸出是?

var checkNum = function (num, divisor) {
    return num % divisor === 0
}
if (checkNum(27, 5)) {
    console.log('Hello')
} else {
    console.log('World')
}

預期輸出: 
____

World
# 我們將一個函式表示式賦值給了checkNum變數,後面就可以使用checkNum來呼叫這個函式了。這個函式接受兩個引數(num,divisor)並返回一個布林值(真假值),這個布林值取決於num對divisor取餘是否等於0。簡單來說,這個函式的作用是判斷引數num是否能被divisor整除。

常見內建物件

內建物件 說明 示例
eval eval函式會將傳入的字串當做 JavaScript 程式碼進行執行 eval("console.log('hello world')")
isNaN 用來確定一個值是否為NaN isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
parseFloat 根據給定的引數返回其對應的浮點數。 parseFloat(3.14);
parseInt 解析一個字串並返回指定基數的十進位制整數 parseInt("15,123", 10);
要想以下JavaScript程式碼執行符合預期,空格處應該填什麼?

if (isNaN('.67') === ___) { 
    console.log('hello') 
} 

預期輸出: 
hello 

false
要想以下JavaScript程式碼執行符合預期,空格處應該填什麼整數?

console.log(parseInt("21", ____))
預期輸出: 
17

8
# 21的8進位制數為17
以下的JavaScript程式碼的預期輸出是?

console.log(parseFloat('8.9a89bd'))
預期輸出:
____

8.9
以下的JavaScript程式碼的預期輸出是?

if (isNaN('3e4') === false) {
    console.log('Hello')
} else {
    console.log('World')
}

預期輸出: 
____
Hello

轉義字元

要想以下JavaScript程式碼執行符合預期,空格處需要填寫什麼?

var str = ________ 
console.log(str) 

預期輸出: 
小明說:"吃飯嗎?" 
我說:"已經吃過了"

# 可以看出這連個字串中間的引號原樣輸出了,那麼用到轉義字元\,中間還有換行的標誌\n

image

以下的JavaScript程式碼的預期輸出是?

var str = '\'這是為什麼呢?\''
console.log(str)
預期輸出: 
____
'這是為什麼呢?'

# 轉義字元將單引號原樣輸出
以下的JavaScript程式碼的預期輸出是?

var str = '\"這是為什麼呢?"'
console.log(str)
預期輸出: 
____
"這是為什麼呢?"
# 在單引號定義的字串中出現了雙引號,可以直接使用,不會報語法錯誤。並且雙引號前加轉義符(\)和不加效果一樣。
以下的JavaScript程式碼的預期輸出是?

var str = '\\n這是為什麼呢?"'
console.log(str)
預期輸出: 
____
\n這是為什麼呢?"

字串常見的方法與屬性

屬性名稱 作用 示例 結果
length 獲取字串入的長度 'abcd'.length 4
方法名稱 作用 示例 結果
charAt() 獲取指定位置的字元 'abcd'.charAt(2) c
indexOf() 檢索指定的字串值在字串中首次出現的位置 'abcd'.indexOf('a') 0
lastIndexOf() 從後往前查詢所要搜尋的字串在原字串中第一次出現的位置(索引),找不到則返回-1 'abcdabc'.lastIndexOf('a') 4
search() 檢索字串中指定的子字串,或檢索與正規表示式相匹配的子字串 'abcd'.search('c') 2
match() 字串內檢索指定的值,或找到一個或多個正規表示式的匹配 'abcdabc'.match('a') ['a', index: 0, input: 'abcdabc']
substring() 字串擷取方法,它可以接收兩個引數,分別是要擷取的開始位置和結束位置,它將返回一個新的字串 'abcdabc'.substring(1, 4) bcd
slice() 與substring()方法非常類似,它傳入的兩個引數也分別對應著開始位置和結束位置。而區別在於,slice()中的引數可以為負值 'abcdabc'.slice(1, 4) bcd
replace() 用來進行字串替換操作,它可以接收兩個引數,前者為被替換的子字串,後者為用來替換的文字 'abcd'.replace('a', 'A') Abcd
split() 於把一個字串分割成字串陣列 'abcd'.split('') ['a', 'b', 'c', 'd']
toLowerCase() 可以把字串中的大寫字母轉換為小寫 'Abcd'.toLowerCase() abcd
toUpperCase() 可以把字串中的小寫字母轉換為大寫 'Abcd'.toUpperCase() ABCD
要想以下JavaScript程式碼符合預期,空格處應該填什麼?

var a = "abccba"._______("b")
console.log(a)
預期輸出結果:
4

lastIndexOf
# 輸出b字元的下標位置,正向肯定不行了為1,那麼使用lastIndexOf倒著取
要想以下JavaScript程式碼符合預期,空格處應該填什麼?

var str = "a1-b2-c3-d4"
console.log(str._____('-'))
預期輸出結果:
['a1', 'b2', 'c3', 'd4']

split
# split把一個字串分割成字串陣列,指定分隔符為-
要想以下JavaScript程式碼符合預期,空格處應該填什麼整數?

var str = "JavaScript是一門動態型別的語言"
console.log(str.substring(4, ____))
預期輸出結果:
Script

10
# substring字串擷取方法,它可以接收兩個引數,分別是要擷取的開始位置和結束位置,它將返回一個新的字串,4為開始位置結束位置為10正好取出Script
以下的JavaScript程式碼的預期輸出是?

var str = "AbcDe"
console.log(str.toUpperCase())
預期輸出結果:
____

abcde
# 轉大寫方法
以下的JavaScript程式碼的預期輸出是?

var str = "Chinese"
console.log(str.charAt(3))
預期輸出結果:
____

n
# charAt方法指定了下標位置,輸出該索引值的元素 

陣列常見方法與屬性

方法 說明
length 訪問一個陣列的length屬性,返回該陣列的長度,即該陣列元素的個數
forEach() 對陣列的每個元素執行一次給定的函式
indexOf() 返回在陣列中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。
join() 將一個陣列的所有元素連線成一個字串並返回這個字串。如果陣列只有一個專案,那麼將返回該專案而不使用分隔符。
map() 建立一個新陣列,其結果是該陣列中的每個元素是呼叫一次提供的函式後的返回值。
pop() 從陣列中刪除最後一個元素,並返回該元素的值。此方法更改陣列的長度。
push() 將一個或多個元素新增到陣列的末尾,並返回該陣列的新長度。
reverse() 將陣列中元素的位置顛倒,並返回該陣列。陣列的第一個元素會變成最後一個,陣列的最後一個元素變成第一個。該方法會改變原陣列。
shift() 從陣列中刪除第一個元素,並返回該元素的值。此方法更改陣列的長度。
slice() 返回一個新的陣列物件,這一物件是一個由 begin 和 end 決定的原陣列的淺拷貝(包括 begin,不包括end)。原始陣列不會被改變。
sort() 對陣列的元素進行排序,並返回陣列。
unshift() 將一個或多個元素新增到陣列的開頭,並返回該陣列的新長度(該方法修改原有陣列)。
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var arr = ['e', 'd', 'f'] 
var str = arr.___() 
console.log(str) 

預期輸出結果: e,d,f

join
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var arr = ['tree', 795, [0, 1, 2]]; 
arr.______([4,9,10]) 
console.log(arr[0][1]) 

預期輸出結果: 9

unshift
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var arr = [1,2,3,'a','t',45,'r',9]; 
var newArr = arr.slice(____, 6) 
console.log(newArr[2])

預期輸出結果: 
45

3
# 陣列的slice方法會擷取原陣列的一部分並返回出來。從slice的第一個引數所表示的索引位置的元素(包含該元素)開始,到第二個引數所代表的索引位置的元素(不包含該元素)結束。該題中newArr[2]的值為45,又因為newArr是從arr中擷取出來的,所以newArr應該為['a', 't', 45]
要想以下JavaScript程式碼符合預期,空格處應該填什麼(表示式除外)?

var arr = ['a', 'b', 'c', 'd']; 
var str = arr.______().join('')
console.log(str) 

預期輸出結果: 
dcba

reverse
要想以下JavaScript程式碼符合預期,空格處應該填什麼整數?

var arr = [
    {
        name: '張三',
        age: 24
    },
    {
        name: '李四',
        age: 32
    },
    {
        name: '王五',
        age: 19
    }
]

arr.sort(function (item1, item2) {
    return item1.age - item2.age
})

console.log(arr[____].name)

預期輸出結果: 
李四

2

# 陣列的sort方法會接受一個回撥函式作為引數,並且會給這個回撥函式傳兩個值,這兩個值即為陣列中相鄰兩個元素,如果這個回撥函式返回的是一個小於0的數,那麼第一個值就在第二值的前面,等於0的話就不變,大於0的話,第一個值就在第二個值的後面。題中的回撥函式的返回值是第一個值的age屬性減去第二個值的age屬性,如果小於0,item1就在item2前面,反之就在後面。由此可見,就是按照該陣列中每一個元素的age的值做升序排列。所以,排序後的陣列,0索引位置的值是王五這個物件,1索引位置的值是張三這個物件,2索引位置的值是李四這個物件

相關文章