1.以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:()
var obj = {"key":"1","value":"2"};
var newObj = obj;
newObj.value += obj.key;
alert(obj.value);
答:21
解析:obj是JS对象,对象由键和值组成,操作以地址进行。
var newObj = obj相当于两个对象指向同一个地址,修改其中任何一个,另外一个也会受到影响。
newObj.value = 2;
obj.key = '1'; newObj.value += obj.key; 相当于 newObj.value = newObj.value + obj.key; 所以'2' + 1在javascript中自动转化为字符串拼接操作得到
'21'
2.下面有关JavaScript中 call和apply的描述,错误的是?
A.call与aplly都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
B.两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是
C.apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入
D.call传入的则是直接的参数列表。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
答:B
解析:call()方法和apply()方法的作用相同,他们的区别在于接收参数的方式不同。对于call(),第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。(在使用call()方法时,传递给函数的参数必须逐个列举出来。使用apply()时,传递给函数的是参数数组)如下代码做出解释:
function add(c, d){
return this.a + this.b + c + d;
}
var o = {a:1, b:3};
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
3.下面有关html结构描述正确的有?
A.<ul> <li> </li> </ul>
B.<ol> <li> </li> </ol>
C.<dl><dt><dd></dd></dt></dl>
D.<table> <tr> <td></td> </tr> </table>
答:ABD
解析:<li> 标签定义列表项目。
<li> 标签可用在有序列表 (<ol>) 和无序列表 (<ul>) 中。
<dl>标记定义了一个定义列表,定义列表中的条目是通过使用<dt>标记(“definition title”,定义标题)和<dd>标记(“definition description”,定义描述)创建的。<dt>给出了术语名,<dd>标记给出了术语的定义。
<table>代表表格</table>
<tr>代表表格中的一行</tr>
<td>代表表格中的一列</td>
4.语句var arr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正确的是哪几项?
A.Math.max(arr)
B.Math.max(arr[0], arr[1], arr[2], arr[3])
C.Math.max.call(Math, arr[0], arr[1], arr[2], arr[3])
D.Math.max.apply(Math,arr)
答:BCD
解析:数Math.max()传入的参数必须是整数,小数,或0,其他类型就会返回NaN,js中call和apply方法可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为有thisObj指定的新对象
apply和call的作用一样,只是传入的参数不同
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入
5.写出如下代码弹出的结果
<script>
var m= 1, j = k = 0;
function add(n) {
return n = n+1;
}
y = add(m);
function add(n) {
return n = n + 3;
}
z = add(m);
</script>
y和z的最终结果为:
A. 2 4
B. 4 4
C, 2 2
D 报错
答:B
解析:js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数,只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后,后面的函数会覆盖前面定义的函数。结合这道题来说,由于函数声明提升,所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数,所以两次调用add()返回的值是相同的。也就是y,z都为4.