1.如何正确的定义变量
2.下边哪一项会弹 1?
A:if('2' < '15') {alert(1)};
B:if(15 - 15) {alert(1)};
c:if('2' < '15') {alert(1)} else {alert(2)}
D:if('5' + 0) {alert(1)}
正确答案 D
解析:A选项:字符串比较的时候,会按照Unicode编码比较,而‘1’的Unicode编码小于‘2’的Unicode编码,所以字符串‘1’小于字符串‘2’,‘15’ 和‘2‘比较时,会先比较第0位,而’15‘中的第0位 ’1‘ 事小于’2‘的,则认定’15‘小于’2‘,并不会继续向后比较,所以A和C是错误的
B选项:数字15-15等于0,0转换成布尔值是false,所以B不成立
D选项:’5‘和0相加,就是字符串’5‘拼接数字0 得到字符串50‘,非空字符串转成布尔值就是true,所以D是正确的
3.现有如下html结构
<ul>
<li>click me</li>
<li>click me</li>
<li>click me</li>
<li>click me</li>
</ul>
运行如下代码:
var elements = document.getElementsByTagName('li');
var length = elements.length;
for(var i = 0; i < length; i++) {
elements[i].onclick = function() {
alert(i)
}
}
A:依次弹出1,2,3,4
B:依次弹出0,1,2,3
C:依次弹出3,3,3,3
D:依次弹出:4,4,4,4
正确答案:D
解析:这里注意 alert(i)是在点击事件中,但是当我们页面可以点击时,循环已经执行完了,所以拿到的结果是循环执行完后的结果:4,4,4,4
问:为什么点击事件执行时,for循环已经结束?看下图
问:为什么不是3,3,3,3
循环的结束条件i<length,也就是i<4, 所以当循环结束的时候,i肯定是等于4的。
扩展:let 声明变量i 得到的结果为啥是1,2,3,4(有时间再写)
4.以下输出结果为
var User = {
count: 1,
getCount: function() {
return this.count
}
}
console.log(User.getCount()) // what?
var fun = User.getCount
console.log(fun) // what?
A 1 undefined ;
B 1 1 ;
C undefined 1
D undefined undefined;
正确答案:A
解析:这道题张店考察大家对this指向的理解。
1.首先User是一个对象,它有两个属性count和getCount。
count的值是数字1,getCount的值是一个function,
User.getCount(),当作为对象的方法调用时,this指向当前对象,那么this的指向就是User,
this.count等于User.count 而函数getCount就是return this.count,
所以console.log(User.getCount())的结果是1
2.var fun = User.getCount
console.log(fun) // what?
将 User.getCount赋值给 fun
当运行fun时,并不是作为对象的方法被调用的,那么这个this就是指向window的,但是我们并没有在window里定义count这个变量,那么return this.count 自然就找不到了,所以是undeind
总结一句:当一个函数(方法)作为一个对象的方法调用时,this指向的是当前对象。其余情况下被调用,this指向的是window。也可以理解为,谁调用(这个方法),this就指向谁。
5
正确答案:C
解析:obj.method
先看method,这是一个函数,它的主体内容的而第一步就是调用了另一个函数,fn()
fn()是直接定义在window中的,所以this指向window,而length呢也是定义在window中的,所以打印结果为10.
往下第二步,arguments[0]()
arguments呢,是实参的集合,也就是说,传进来几个参数,arguments里就有几个参数 obj.method(fn,1,2) 调用method时传了三个参数,所以arguments就等于{0:fn,1:1,2:2}
再来看arguments[0],是不是就是 fn 那么arguments[0]()是不是就等于 fn()
也就是说,fn又被argumens调用了一次,再回过头看fn函数
function fn(){
console.log(this.length)
}
arguments是实参的集合,它本身是一个对象(类数组),它调用了自己下边的方法,。第4题中说到,作为对象的属性被调用,this就指向当前对象。那么this就是指向的arguments
那么此时的this.length等于arguments.length
arguments里有啥? 不是有三个属性吗,有三个属性,不就是arguments的长度吗?所以此时答应console.log(this.length) 得到的结果就是3
6. 以下代码运行后,结果为
var i = 0;
alert( ++i == i++ );
A: true
B,false
C,undefined
D,NaN
正确答案:A
解析:1.这里要注意运算的优先级,先执行++i,此时i变成了1
再执行i==i,(注意,i++中的++运算优先级最低,会运算完==后再运行++)
分步骤执行就是 第一步:++i(此时i===1)
第二步:i==i(1等于1,true)
第三步i++(此时是2,但是它是已经比较完是否相等后再执行的,所以结果是true)
最后总结下,此运算顺序就是这样:((++i)==i)++
7.如下代码输出的结果是什么:
console.log(1+ "2"+"2");
console.log(1+ +"2"+"2");
console.log("A"- "B"+"2");
console.log("A"- "B"+2);
A.122 122 NaN NaN
B.122 32 NaN NaN2
C.122 32 NaN2 NaN
D.122 32 NaN2 NaN2
正确答案:B
解析:A. 1+’2‘+’2‘ :+碰到字符串就会执行字符串拼接,所以结果是 ’122‘
B.1+ +’2‘+’2‘: 这里重点注意(+’2‘),这个+号,代表的是正负的正号,正号本身会把字符串转为正常数字,所以就变成了1+2+’2‘ 最终结果为:’32‘
C:'A'-'B'+'2':-只能用来数字计算,所以’A‘-'B'是NaN, NaN+'2'会进行字符串转换(拼接)所以结果是NaN2
D:根据C得到'A'-'B'结果为NaN,NaN+2 这里进行的是数字运算,NaN和任何数字进行运算都是NaN,所以最后结果是:NaN
8.阅读下列程序,写出 x,y,z 最后的值
A. 1 2 4
B. 1 4 4
C. 4 2 4
D. 1 1 1
正确答案:B
首先这里会进行预解析
然后再仔细看一下 add 重名了,所以第二个add会覆盖第一个add
,最终变为上图的运行方式
首先x并没有做任何复制和改变
而y和z的操作是完全一样的所以最后的结果都是4,也就是答案B:1,4,4
9. 看下列代码输出什么?
var foo = "11"+2-"1";
console.log(foo);
A: 1121
B: 131
C: 111
D: 112
正确答案:C
解析:”11“+2,是字符串拼接结果为”112“,
在js中减号只能执行剑法运算,所以其他类型会被转化为数字进行运算,也就是112-1 得到结果为111
10.请给出这段代码的运行结果
A.1 1
B.1 2
C.2 1
D.2 2
正确答案:C
解析:先执行函数中的alert(bb),
但是函数中声明了形参bb,所以bb=2,知识为局部变量bb重新赋值为2
并不影响外边的变量,函数外的变量bb依然是1
11.以下代码的运行结果是
A. 5 5
B. undefined,undefined
C. 5,undefined
D. 5,Uncaught ReferenceError: a is not defined
正确答案:C
解析:这里还是作用域问题,注意:vara=b=5,这是知识给a加了声明,也就是说a是证明在函数内的,b没有声明,没有声明就会变成全局变量(严格模式会报错)
在匿名函数外打印b,b是全局的,所以结果是5,到那时a是生命在函数内的,并不是全局的,所以a找不到,就报错了。
12.下面的等式成立的是()
A, parseInt(12.5) == parseFloat(12.5)
B, Number('') == parseFloat('')
C, isNaN('abc') == NaN
D, typeof NaN === 'number'
正确答案:D
解析:A : parseInt(12.5)结果为 12 ,parseFloat(12.5) 结果为 12.5, 12 == 12.5 结果自然不能成立
B: Number('')结果为0, parseFloat('')结果为 NaN,结果自然也不相等啊
C: isNaN('abc') == NaN,只要看到了 NaN 那等式必须不成立
D:typeof的返回值是个字符串类型。NaN是number类型,typeof NaN就会返回值’number
‘typeOf 的 返回值是 数据的类型,他的返回值类型是个字符串,也就是说type( type( Number))是个字符串
13.JavaScript 定义 var a="40",var b=7,则执行 a%b 会得到()
A.5
B."5"
C.undefined
D.null
正确答案:A
解析:取模会隐士类型转换成数字,结果自然 40%7 = 5
14.下列写法正确的是?()
正确答案:A
解析:一个for循环包含3各部分,第一部分是包含一个变量,第二部门包含循环推出的条件,第三部分是每次循环最后要执行的操作。
也可以解释为: for 语句的语法 for(初始值;判断条件;自增语句){执行语句}
B选线,用if明显不对。C选项,每一项用逗号隔开不对,
D选项也是语法错误。 符合结果的只有A,A也包含fou循环成立的三个部分。
网友评论