http://bp.pep.com.cn/jc/ywjyjks/ywjygjkcjc/index.html?scene=2&clicktime=1581301811&enterid=1581301811&from=groupmessage&isappinstalled=01 下列程序輸出什么結果:
a = 123;
b = '123';
alert(a == b);
考察點: js做等值判斷的時候會做隱式轉型;前端必知;
答案: true
2 以下代碼輸出什么結果:alert(0.1 + 0.2 === 0.3)
考察點:無論js還是java又或是其他高級語言,浮點數計算是不准確的;
答案: false
3 下列程序輸入什么結果?
(function() {
var a = b = 5;
})();
console.log(b);
考察點:知道js的變量作用域;
答案: undefined
4 參考String.trim()方法,請給String添加一個rtrim方法,方法要完成的功能是去掉字符串右邊的空格。提醒:考慮原型;
考察點:知道怎么在原型上添加功能;能寫出String.prototype.rtrim = function(){} 可認為作對了1/3; 能大概寫出答案一的套路的,可給滿分,能寫出答案二的套路的,可加分;
答案1, 常規做法, 從字符串最后一位開始尋找非空格字符;找到下標之后做substring:
String.prototype.rtrim = function() {
var index = this.length - 1;
for(var i=this.length-1; i>=0; i--) {
index = i;
if(this.charAt(i)!=' ') {
break;
}
}
return this.substring(0, index + 1);
}
答案2, 直接用正則表達式匹配並替換后面的空格 /\s{1, }$/:
String.prototype.rtrim = function() {
return this.replace(/\s{1,}$/, '')
}
5 按如下注釋行要求完成代碼:
var Obj = function(msg){ this.msg = msg; this.shout = function(){ alert(this.msg); } this.waitAndShout = function(){ //隔五秒鍾后執行上面的shout方法
} }
考察點:如調用setTimeout,則this指向了window;要么that = this; that.shout(); 要么使用箭頭函數;這道題太經典,幾乎所有將js的書籍差不多都有這樣的例子;
答案1,給this取別名,后續再引用:
var that = this;
setTimeout(function(){that.shout();}, 5000)
答案2,利用es6的箭頭函數:
setTimeout(()=>{this.shout();}, 5000);
6 請編寫一段JavaScript腳本生成下面這段DOM結構。要求:使用標准的DOM方法或屬性。
<div id=”example”> <p class=”slogan”>你好!</p> </div>
考察點: 原生dom的最基本操作不能忘記;大體上能寫出document.createElement(),createTextNode(), 能appendChild()就算對;實在不行的話,會寫一個innerHTML也算勉強過關;
答案1 :
var div = document.createElement('div');
div.id = "example";
var p = document.createElement('p');
p.className = "slogan";
p.innerHTML = '你好!';
div.appendChild(p);
document.body.appendChild(div);
答案2, 能想出這個投機取巧的辦法也行吧:
document.body.innerHTML = '<div id=”example”><p class=”slogan”>你好!</p></div>';
function doSomething() {
alert(this);
}
1 )element.onclick = doSomething,點擊element元素后。
2 )element.onclick = function() {doSomething()}, 點擊element元素后。
3 )直接執行doSomething()。
考察點: 還是this的問題; 回答對2個算過關吧。
答案(非標准答案,能說出第一個this指向所綁定元素;第二個指向window,第三個指向window就是全對):
1)將彈出具體綁定的元素的名稱;
2)將彈出‘window’
3)將彈出‘window’
8 有如下頁面代碼;請問頁面加載完畢之后,點擊第一個LI元素,將會輸出結果?
<html>
<body>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
</body>
</html>
<script>
var lis = document.getElementsByTagName('li');
for(var i = 0; i < lis.length; i++) {
lis[i].onclick = function(){alert('you clicked item ' + i)}
}
</script>
考察點:閉包;這樣的場景在編程中很常見;
答案: you clicked item 5
9 如下代碼,當用戶點擊了‘Click here!’ 之后控制台會輸出什么結果?
<div onclick="console.log('div')"> <p onclick="console.log('p')"> Click here! </p> </div>
考察點,js事件是會冒泡的,所以會看到兩條log;先p,后div;能說出有兩條log的就算對;
答案:
p
div
10 寫一個正則表達式,用來驗證手機號;
考察點:正則表達式在web前端幾乎必備;起碼要能寫出\d{11}, 再進步一點要能寫出^\d{11}$;再完美一點的要能寫出
答案:^1\d{10}$
