C1能力认证训练题解析 _ 第三部分 _ JavaScript基础
一、JavaScript 变量命名规则
(1)在JavaScript中以下哪些变量名全都是非法的(会导致程序报错)?
A. 1person,name
B. name,var
C. $orderwera23,uiuiuqwer4_23aser2
D. 1person,var
数字或者某些特殊字符开头以及使用了关键字都会导致语法层面报错;
1person数字开头、var是关键字,所以这两个会导致报错。
(2)在JavaScript中,以下哪些变量名不建议使用?
A. 1person,var,$orderwera23,uiuiuqwer4_23aser2
B. 1person,name
C. name,var
D. uiuiuqwer4_23aser2,name
1persion和var会导致程序报错,不建议使用;$orderwera23,uiuiuqwer4_23aser2 意义不明,不建议使用。
(3)在JavaScript中,以下字符串中那些不能被作为变量名使用?(使用了,程序就会报错)
A. owefsdfwef2,var,for,myName
B. for,function,var
C. owefsdfwef2,var,function
D. myName,var,function
关键字(保留字)不能作为变量名使用。在JS语法中,
for
是用来定义循环结构的关键字;function
是用来定义函数的关键字;var
是用来定义变量的关键字。
owefsdfwef2
虽然意义不清,但是一个合法的变量名,使用它并不会报错;myName
是一个合法且意义清晰的变量名。
二、逻辑运算
(1)要想以下JavaScript代码符合预期,空格处应该填什么运算符?
var a = 11 var b = 6 if(__(a<b)) { console.log(a) } else { console.log(b) } //预期输出结果:11
答案:!
输出结果为11,所以是输出a,执行if后的语句,但a<b是false,我们需要使它变为true,所以用逻辑非 !
(2)以下JavaScript代码运行的预期输出结果是?
var num = 55 var str = "55" if(num === str) { console.log("Yes") } else { console.log("No") } //预期输出结果为?____
答案:No
变量num为整型55,变量str为字符串"55",全等运算符 (
===
) 会比较两者的变量值大小和变量类型是否均相同,此处类型不同,所以返回false,执行else后的语句,就会执行console.log("No")语句,预期打印No
(3)以下JavaScript代码运行的预期输出结果是?
var res1 = 5 > 8 var res2 = true if(res1 && res2) { console.log("Yes") } else { console.log("No") } //预期输出结果为?____
答案:No
变量
res1
是表达式5 > 8
的结果,即为false
。变量res2
为true
。然后对res1
和res2
进行与
操作,因为res1
为false
,所以res1 && res2
的结果也为false
。
与
运算,当其中任何一个操作数为false
时,该运算的结果为false
,只有当两个操作数都为true
时,其运算结果才为true。
(4)以下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 || res2 && res3
的运算循顺序是先计算res2 && res3
,然后再将其结果(false
)和res1
做或
运算。 true || false = true
三、隐式类型转换
(1)以下代码的预期输出是?
var arr = [] var str if (arr) { str = 'hello' } console.log(str) //预期输出为?____
答案:hello
if分支语句中的条件部分会将值或者表达式的值最终转换成布尔值,空数组转换成布尔值为true,所以变量str会被赋值为hello。
(2)要想是一下JavaScript代码运行符合预期,空格处应该填什么运算符?
var a = true var b = 2 var c = a ___ b console.log(c) //预期输出: 2
答案:*
a和b,也就是true和2执行运算后结果为2,true转为字符串为1,1*2 = 2,所以用乘号*
(3)以下JavaScript代码运行的预期输出结果是?
var res = 567 + '1' - 89 console.log(res) //预期输出: ____
答案:5582
数字类型和字符串类型的值进行
+
运算,会把数字类型的值转成字符串类型的值然后再和另一个字符串进行拼接操作,最后得到一个拼接后的字符串;字符串和数字进行
-
运算,会把字符串转成数字,然后和另一个数字相减。567 + '1' - 89 = ‘567’ + ‘1’ - 89 = ‘5671’ - 89 = 5671 - 89 = 5582
(4)以下JavaScript代码运行的预期输出结果是?
if (null) { console.log('Hello') } else { console.log('World') } //预期输出:____
答案:World
null
是JS里面一个特殊的值,表示什么都没有,在这里会被转成布尔值。转成布尔类型的话,则为false
(5)以下JavaScript代码运行的预期输出结果是?
var a = {} if (a) { console.log('Hello') } else { console.log('World') } //预期输出:____
答案:Hello
{ }
表示一个空的对象,在这里会被转成布尔值。在JS中,空对象转成布尔类型的话,其值为true
四、条件分支
(1)以下JavaScript代码的预期输出是?
var a = 8 if (a > 7) { a = 3 } if (a > 4) { a = 5 } console.log(a)
答案:3
题中有两个if分支的结构,a=8时,a > 7 为真,执行该分支的代码,a = 3,然后代码继续往后执行,此时a=3,a > 4 为假,所以a = 5这个赋值语句不会执行,a还是为3。
(2)要想以下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
如果case的代码块里面最后没有break,那么当前case被执行后,会立即执行下一个case(不管值是否匹配),直到有一个case的代码块有break为止;
以此类推,只有当expr为5时,会执行代码块5、代码块6,从而打印111, 222 符合预期输出。
五、For循环
(1)想要以下代码运行符合预期则空格处应该填什么整型数字?
for (var i=0; i <= ___; i++) { console.log(i) } //预期输出结果: 0 1 2 3 4 5
答案:5
循环从0开始,语句2是小于或等于的时候说明会包含空缺的那个数字。
(2)想要以下代码运行符合预期则空格处应该填什么整型数字?
for (var i=1; i <= ___; i+=1) { console.log(i) } //预期输出结果:1 2 3 4 5 6 7 8 9
答案:9
语句2空缺结合预期结果来看i的最大值为9,所以i <= 9。
(3)想要以下代码运行符合预期则空格处应该填什么整型数字?
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
数组的for循环遍历arr[i]指向的就是数组的每一个key所在的值,从a1跳到d1中间跳了3个值(a1是arr[0]、d1是arr[3]、g1是arr[6]),通过规律主要也是看语句三的迭代器+3。
(4)想要以下代码运行符合预期则空格处应该填?
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指向obj的各个键,从realName开始循环,判断k这个键等于什么的时候,打印的obj的值是zhangsan@163.com,主要看哪个键指向的是这个邮箱。
六、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 |
(1)表达式 Math.____(13.6589)计算结果为13,则空格处应该填?
floor,小于13.6589的的最大的整数就是13,所以这儿可以使用向下取整的方法floor
(2)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?(使用中文逗号「,」隔开)
var a = -14.4 var b = 10 var c = Math.____ (a*b) var d = Math.____ (c) console.log(d) //预期输出结果:12
答案:abs,sqrt
首先a*b的默认结果为-144(已是整数,取整方法不适用),已知的Math方法里取绝对值可以将-144转为144;144的平方根正好符合答案,故使用平方根方法
abs:表示返回数字的绝对值
sqrt:表示非负实数的平方根函数
(3)要想以下JavaScript代码符合预期,空格处应该填什么整数?
console.log(Math.sqrt(____)) //预期输出结果:9
答案:81
sqrt:表示非负实数的平方根函数
(4)要想以下JavaScript代码符合预期,空格处应该填什么整数?
console.log(Math.____(3, 4, 89)) //预期输出结果: 89
答案:max
给
Math
内置对象上的一个方法传3个参数,最后返回这三个参数中最大的那个参数。所以这个方法应该是求最大值的方法
(5)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
console.log(Math.____(8.01)) //预期输出结果:9
答案:ceil 向上取整
七、对象属性
(1)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
var obj = {name: 'lisi', city: '北京', age: 21} console.log(obj._______) // 预期输出结果:21
答案:age
在对象中对象的变量点方式可以是查询或者添加一个属性,预期结果为21;对象中的age属性对应的值为21,那么获取这个属性就得到了它对应的值。
(2)要想以下JavaScript代码符合预期,空格处应该填什么整数?
var obj = { name: '王五', friends: ['张三', '李四'], age: 23 } console.log(obj.friends[____]) //预期输出结果:李四
答案:1
obj
这个对象的friends
属性是一个数组,现在要打印这个数组的某一个索引上的值,打印结果是李四
,李四是数组的第一项(数组下标从0开始)
八、函数定义与调用
(1)要想以下JavaScript代码符合预期,空格处应该填什么整型数字?
function foo(a, b) { return a * b } console.log(foo(8, ___)) //预期输出:32
答案:4
该函数有两个参数:a,b。函数执行的时候返回 a * b的值,函数调用时,给出了第一个参数值为8,最终返回32,所以第二个参数是4。
(2)要想以下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
进了一个值。由此可知空格处该填什么了。
(3)以下的JavaScript代码的预期输出是?
var checkNum = function (num) { return num % 2 === 0 } if (checkNum(8)) { console.log('Hello') } else { console.log('World') } //预期输出:____
答案:Hello
将一个函数表达式赋值给了
checkNum
变量,后面就可以使用checkNum
来调用这个函数了;除以2取余为0,简单来说,这个函数的作用是判断参数是否是一个偶数。
九、常见内置函数
(1)要想以下JavaScript代码运行符合预期,空格处应该填什么?
if (isNaN('.67') === ___) { console.log('hello') } //预期输出:hello
答案:false
isNaN函数当参数是一个数字或者数字字符串的时候,返回真,其他返回假;
在大多数编程语言中,0.89这样的小数也可以使用.89来表示,省略掉0。
(2)要想以下JavaScript代码运行符合预期,空格处应该填什么整数?
console.log(parseInt("21", ____)) //预期输出:17
答案:8
parseInt
这个内置函数会把第一个参数按照第二个参数指定的基数(或者说是进制)转成一个十进制整数并返回;现在第一个参数是"21",最终转成的10进制数是17,而八进制下的21就是10进制下的17。
(3)以下的JavaScript代码的预期输出是?
console.log(parseFloat('8.9a89bd')) //预期输出:____
答案:8.9
parseFloat会
将给定的字符串转成一个浮点数,从给定的字符串的右边开始,一个一个字符的比对,直到不能构成一个有效的浮点数为止。
(4)以下的JavaScript代码的预期输出是?
if (isNaN('3e4') === false) { console.log('Hello') } else { console.log('World') } //预期输出:____
答案:Hello
isNaN
内置函数是判断一个字符串是否不是一个数字;此处 3e4 是一个数字,所以isNaN返回false,false===false。在JavaScript中数字的表示有很多种,例如十进制的整数,十进制的小数,科学计数法(例如:
4e20
表示4 乘以 10的20次方),十六进制表示法(例如:0x13af
),八进制表示法(例如:012
)等。
十、字符串定义与转义字符
(1)以下的JavaScript代码的预期输出是?
var str = '\'这是为什么呢?\'' console.log(str) //预期输出:____
答案:'这是为什么呢?'
在单引号定义的字符串中出现了单引号,但是单引号前面使用了反斜杠
\
,即该单引号被转义了,那么这个单引号在该字符串中直接作为一个单引号存在;在单引号定义的字符串中使用单引号,如果不做转义将会报语法错误。
(2)以下的JavaScript代码的预期输出是?
var str = '\"这是为什么呢?"' console.log(str) //预期输出:____
答案:"这是为什么呢?"
在单引号定义的字符串中出现了双引号,可以直接使用,不会报语法错误。并且双引号前加转义符(
\
)和不加效果一样。
(3)以下的JavaScript代码的预期输出是?
var str = '\\n这是为什么呢?"' console.log(str) //预期输出:____
答案:\n这是为什么呢?"
转义符本身也能被转义,转义后就被当成一个普通的反斜杠字符(
\
)使用,不再具有转义的效果。
十一、字符串常见的方法和属性
方法名称 | 作用 | 示例 | 结果 |
---|---|---|---|
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 |
(1)要想以下JavaScript代码符合预期,空格处应该填什么?
var a = "abccba"._______("b") console.log(a) //预期输出结果:4
答案:lastIndexOf
该题属于根据字符串返回它在整个字符串索引位置的题型,如果使用indexOf()方法则结果是1,那么另外一个方法lastIndexOf()则返回符合预期输出结果,意思就是b位于索引位置4。
(2)要想以下JavaScript代码符合预期,空格处应该填什么?
var str = "a1-b2-c3-d4" console.log(str._____('_')) //预期输出结果:['a1', 'b2', 'c3', 'd4']
答案:split
split切割,根据代码及预期结果可知字符串转为了数组,故字符串使用切割函数。
(3)要想以下JavaScript代码符合预期,空格处应该填什么整数?
var str = "JavaScript是一门动态类型的语言" console.log(str.substring(4, ____)) //预期输出结果:Script
答案:10
字符串的
substring
方法是截取原字符串的一部分。截取的规则是从第一个参数表示的索引位置开始(包含该字符),到第二个参数表示的索引为止结束(不包含该位置字符)。
如果 第一个参数 等于 第二个参数,substring 返回一个空字符串。
如果省略 第二个参数,substring 提取字符一直到字符串末尾。
如果任一参数小于 0 或为 NaN,则被当作 0。
如果任一参数大于 str.length,则被当作 str.length。
如果 第一个参数 大于 第二个参数,则 substring 的执行效果就像两个参数调换了一样。
(4)以下的JavaScript代码的预期输出是?
var str = "AbcDe" console.log(str.toUpperCase()) //预期输出结果:____
答案:ABCDE
字符串的
toUpperCase
方法是将该字符串中的所有英文字母转成大写。
(5)以下的JavaScript代码的预期输出是?
var str = "Chinese" console.log(str.charAt(3)) //预期输出结果:____
答案:n
字符串的
charAt
方法的参数会被作为索引,最终会返回字符串中该索引所对应的位置的值。
十二、数组常见方法与属性
(1)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
var arr = ['e', 'd', 'f'] var str = arr.___() console.log(str) //预期输出结果: e,d,f
答案:join
在数组上调用一个方法,返回一个字符串,并且这个字符串是数组里面的每个元素以逗号相连。就是将数组的每个元素连接起来,join方法正好能实现此功能。
join方法在不给参数的时候就是以英文的逗号连接数组的每个元素。
(2) 要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
var arr = ['tree', 795, [0, 1, 2]]; arr.______([4,9,10]) console.log(arr[0][1]) //预期输出结果: 9
答案:unshift
arr[0][1]是指数组arr索引为0的值,再取其索引为1的值。
如果arr[0]的值为[4,9,10],则arr[0][1]的值为9。
所以该数组方法就是将参数[4,9,10]加到数组arr的开头,unshift能实现此功能。
(3)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
var arr = [1,2,3,'a','t',45,'r',9]; var newArr = arr.slice(____, 6) console.log(newArr[2]) //预期输出结果:45
答案:3
slice
方法会截取原数组的一部分并返回,第一个参数表示开始的索引位置的元素(包含该元素),第二个参数代表结束的索引位置的元素(不包含该元素);该题中
newArr[2]
的值为45,又因为newArr
是从arr
中截取出来的,所以newArr
应该为['a', 't', 45]
(4)要想以下JavaScript代码符合预期,空格处应该填什么(表达式除外)?
var arr = ['a', 'b', 'c', 'd']; var str = arr.______().join('') console.log(str) //预期输出结果:dcba
答案:reverse (翻转)
最终输出的是一个字符串,而
join
方法就是将数组中的元素用该方法的参数作为分隔符链接起来形成一个新的字符串,除此之外空格处的方法将数组arr
进行了反转。
(5)要想以下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() 从小到大排序,
sort
方法会接受一个回调函数作为参数,并且会给这个回调函数传两个值,这两个值即为数组中相邻两个元素,如果这个回调函数返回的是一个小于0的数,那么第一个值就在第二值的前面,等于0的话不变,大于0的话,第一个值就在第二个值的后面;题中的回调函数的返回值是第一个值的
age
属性减去第二个值的age
属性,判断结果;最后做了升序排列,李四就位于索引位置3。
文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。
原文链接:majinjian.blog.csdn.net/article/details/122424357
- 点赞
- 收藏
- 关注作者
评论(0)