一、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 内置对象
(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 向上取整