webveuje/考试/完成情况/前端js综合水平测试.md
2021-04-01 09:06:07 +08:00

512 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# web前端javascript综合水平测试 178
## 填空
1. javascript 由 ECMAscript DOM BOM ,三部分组成,简单介绍一下这三部分 5
ECMAscript: javascript的语言规范 包括:语法,类型,语句等等
DOM文档对象模型指的是html页面上的标签
BOM :即浏览器对象模型,是浏览器提供的接口
2. 检测数据类型的方式有 typeof instanceof Object.prototype.toString.call() 三种方式什么区别 4
typeof: 原始值数据类型直接返回null返回Object , 引用值除了function 返回的是function 其他的引用值返回的是 object
instanceof :能检测引用值,原始值不行
Object.prototype.toString.call() 都可以检测
3. 检测NaN的数据类型结果为 [object Number] 5
4. js中 对象转json的方法为 JSON.stringify() json格式转对象的方法为 JSON.parse() 5
5. js 浏览器对象模型包括 window location screen navigator history ,五部份 分别介绍一下这5部分 5
window: 浏览器的窗口
location:浏览器当前url信息
screen:客户端屏幕信息
navigator:浏览器本身信息
history:记录历史信息
6. var a=1;console.log(a++) 运行的结果为: 1 5
js运算符的优先级 优先级从高到低依次是:(); 一元加减 ;求幂 ; */ ; +,- ; = ; 4
7. js设置属性和属性值的方法为 object.setAttribute(attribute,value) 5
8. 五大主流浏览器及内核 Chrome:Webkit/blink; Safari:Webkit; IE:trident; FireFox:gecko; Opera: presto 5
9. jq ajax基本结构及解释 5
$.ajax({
url: "address", // 网络地址
data:obj, //传输数据
type:"GET", //传输方法
dataType:"json", //数据类型
success: function (res) { //成功返回的函数方法
console.log(res)
}
});
10. 本地缓存的增删改查 5
localStorage.setItem(key, obj)
localStorage.removeItem(key);
localStorage.setItem(key, obj)
localStorage.getItem(key);
11. jq选择器列举 4
$(".class") $("p") $("#id") $("ul li:first") $("p[target = "xxx"]")
## 指出下面代码运行结果并分析其执行过程
1 . 10
```
function a(n) {
if (n <= 1) {
return 1
} else {
return n * a(n - 1)
}
}
console.log(a(5)) //120 调用a函数递归5*4*3*2*1=120
var cheng=a //把函数a赋给cheng
a=null //a的值改为null
console.log(cheng(5)) //执行cheng时return的a找不到故错误Error: a is not a function
```
2 10
```
function C1(name) {
if (name) {
this.name = name;
}
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'join';
}
//c1/2/3的原型的name为tom
C1.prototype.name = 'Tom';//调用时没有name传值if里的语句不调用故找原型的name为tom
C2.prototype.name = 'Tom';//调用时没有name传值故this.name为undefined
C3.prototype.name = 'Tom';//调用时没有name传值故name为false||'join'这个true||返回第一个真值故this.name为join
alert((new C1().name) + (new C2().name) + (new C3().name));
//Tomundefinedjoin
```
3 10
```
function fn()
{
this.user = '追梦子';
var obj={user:"momo"}
return {};
}
var a = new fn;
console.log(a.user); //undefined
//构造函数中的this与被创建的新对象a绑定当函数return的值为对象时this就指向这个被return的对象对象里为空故.user为undefined
```
4 10
```
window.color = 'red';
document.color = 'yellow';
var s1 = {color: 'blue' };
function changeColor(){
console.log(this.color);
}
changeColor.call(); //red 默认window借用changeColor方法输出this.color及window的颜色red
changeColor.call(window); //red 同上
changeColor.call(document); //yellow document借用changeColor方法输出document.color及document的颜色yellow
changeColor.call(this); //red this默认是window的故同window
changeColor.call(s1); //blue s1借用changeColor方法输出s1.color及s1的颜色blue
```
## 简答题
1. 说明call,apply,bind 的区别几个 10
call参数一个个传参
apply 参数放到一个数组传参;
bind是返回对应函数便于稍后调用apply、call是立即调用
2. js的typeof的返回值有哪些 10
number, boolean, string, undefined, object, function,
3. 说出数组相关的几个方法并说明作用 6
push() 在末端添加项 pop() 从末端移除并返回该元素
shift() 从首端移除并返回该元素 unshift() 从首端添加项
splice(p, d, items) —— 从p开始删除d个元素并插入 items
4. ajax请求时的get、post的区别 5
使用Get请求时,参数在URL中显示, 发送数据量小 ,不安全
使用Get请求时,参数不会在URL中显示, 发送数据量大 ,安全
5. 如何阻止浏览器的默认事件 5
event.preventDefault();
6. 如何阻止事件冒泡 5
event.stopPropagation();
7. == 和===的区别 5
===比较类型和值,==只比较值
8. 局部变量和全局变量的区别 10
1. 作用域不同:全局作用域为整个程序,而局部为当前函数或循环等
2. 内存存储方式不同:全局存储在全局数据区中,局部存储在栈区
3. 生命期不同:全局的生命期随主程序的销毁而销毁,局部随函数或循环退出就销毁
4. 使用方式不同:全局声明后程序的各个部分都可以用到,局部只能在局部使用。
## 通过代码实现下面要求
1. 通过原型链实现对象继承 10
**function** Parent(p) {
this.p = p;
this.psay = **function** () {
console.log("Parent:"+p);
}
}
**function** Child(c) {
**var** c = c;
this.csay = **function** () {
console.log("childName: "+c)
}
}
**function** GrandChild(g) {
this.g = g;
this.gsay = **function** () {
console.log("grandChildName :"+ this.g);
}
}
**let** parent = new Parent();
Child.prototype = parent;
**let** child = new Child();
GrandChild.prototype = child;
**let** grandchild = new GrandChild();
2. js手动实现 jq的链式操作 10
function Person(){};
Person.prototype ={
setName:function(name){
this.name = name;
return this;
},
setAge:function(age){
this.age = age;
return this;
},
setSex:function(sex){
this.sex = sex;
return this;
}
}
var Person= new Person(); Person.setName("Tom").setAge(24).setSex("male");
3. 做一个网页计算器 实现输入两个数 完成加减乘除四则运算 10
<body>
<input type="text" name="text" id="pre" >
<select id="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="text" id="next" >
<span>=</span>
<input type="text" id="result" readonly="true">
<input type="button" id="btn" value="提交" onclick="calculator();">
    <script>
**function** calculator(){
**var** pre=document.getElementById("pre").value;
**var** next=document.getElementById("next").value;
**var** opra=document.getElementById("operator").value;
**var** result=0;
switch(opra) {
case "+":
result=parseFloat(pre)+parseFloat(next);
break;
case "-":
result=parseFloat(pre)-parseFloat(next);
break;
case "*":
result=parseFloat(pre)*parseFloat(next);
break;
case "/":
if(parseFloat(next)!=0){
result=parseFloat(pre)/parseFloat(next);
}
else{
alert("除数不能为0");
return;
}
break;
default:
break;
}
document.getElementById("result").value=result;
}
</script>
</body>
4. 实现一个打点计时器,要求
1、从 start 到 end包含 start 和 end每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1start 和end为用户输入
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
start = prompt('输入一个数从它开始到逐渐加一');
end = prompt('一直加到几为止');
count(start,end);
**function** count(start, end) {
console.log(start);
**var** temp=setInterval(**function**(){
if(start<end){
console.log(++start);
}
else{
clearInterval(temp);
}
},1000);
return {
cancel:**function**(){
clearInterval(temp);
}
}
}
5. 在页面上将下面的json数据需要放到表格里
json数据为
[{"title":"史莱姆1号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},{"title":"史莱姆2号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05},{"title":"史莱姆3号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},{"title":"史莱姆4号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},{"title":"史莱姆5号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05}]
title对应文章标题auth 对应的是作者 contnet对应的是简介 date对应的是日期
**var** stu = [
{"title":"史莱姆1号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},
{"title":"史莱姆2号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},
{"title":"史莱姆3号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},
{"title":"史莱姆4号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"},
{"title":"史莱姆5号","auth":'咖啡不放糖',"content":"别看我只是一直史莱姆","date":"2020/03/05"}
]
<table border="1px" id="tab">
        <tr>
            <th>文章标题</th>
            <th>作者</th>
            <th>简介</th>
            <th>日期</th>
        </tr>
    </table>
$(document).ready(**function**() {
**var** s = "";
for(**var** i = 0; i < stu.length; i++) {
s = "<tr><td>" + stu[i].title + "</td><td>" + stu[i].auth + "</td><td>" +
stu[i].content + "</td><td>" + stu[i].date + "</td></tr>";
$("#tab").append(s);
}
});
6. 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况返回参数 num
**function** fizzBuzz(num) {
if(num%3==0&&num%5==0){
return "fizzbuzz";
}else if(num%3==0){
return "fizz";
}else if(num%5==0){
return "buzz";
}else if(typeof(num)!="number"){
return false;
}else{
return num;
}
}