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.