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}$