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

327 lines
8.2 KiB
Markdown
Raw Permalink 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综合水平测试
## 填空
1. javascript 由 ECMAscriptDOM BOM ,三部分组成,简单介绍一下这三部分
ECMAscript :javascript 的核心描述了js基本语法和数据类型是一套 标准
DOM: 文档对象模型dom通过节点树来创建文档使开发者对文档节点控制力提高
BOM: 对浏览器窗口的访问和操作
2. 检测数据类型的方式有 typeof instanceof Object.prototype.toString.call() 三种方式什么区别
区别typeof 可以对JS基本数据类型做出准确的判断除了null而对于引用类型返回的基本上都是objec
instanceof判断对象和构造函数在原型链上是否有联系如果有返回true 没有返回false
toString是Object原型对象上的一个方法该方法默认返回其调用者的具体类型更严格的讲是 toString运行时this指向的对象类型, 返回的类型
格式为[object xxx],xxx是具体的数据类型
3. 检测NaN的数据类型结果为 number
4. js中 对象转json的方法为 JSON.stringfy() json格式转对象的方法为 JSON.parse()
5. js 浏览器对象模型包括 window location navigator history screen ,五部份 分别介绍一下这5部分
window 全局作用域
location 对窗口url的信息
navigator 提供浏览器信息
history 提供历史访问记录
screen 用户显示器相关信息
6. var a=1;console.log(a++) 运行的结果为: 1
7. js运算符的优先级 从高到低为: () > .,[] 函数调用() > 后置递增a++后置递减a-->逻辑非 ! + - 前置递增(++a) 前置递减(--a) typeof > * / % > - + > 小于 (<) 小于等于(<=) 大于(>) 大于等于(>=) in instanceof >等于(==) 非等于(!=) 全等(= = =) 非全等(!= =>&& || >?: >赋值相关>
8. js设置属性和属性值的方法为 setattribute()
9. 五大主流浏览器及内核
1、IE浏览器内核Trident内核也是俗称的IE内核
2、Chrome浏览器内核统称为Chromium内核或Chrome内核以前是Webkit内核现在是Blink内核
3、Firefox浏览器内核Gecko内核俗称Firefox内核
4、Safari浏览器内核Webkit内核
5、Opera浏览器内核最初是自己的Presto内核后来是Webkit现在是Blink内核
10. jq ajax基本结构及解释
$.ajax({
url:"" 请求地址
type:"" 请求方式
datatype:"" 后台返回的数据格式
success 回调函数
})
11. 本地缓存的增删改查
localstorage.setitem()
localstorage.getitem()
localstorage.clear()
localstorage.removeitem()
12. jq选择器列举
```
$("#id") $(".class") $("标签") $([属性]) $(A,B) ...
```
## 指出下面代码运行结果并分析其执行过程
1 .
```
function a(n) {
if (n <= 1) {
return 1
} else {
return n * a(n - 1)
}
}
console.log(a(5))
var cheng=a
a=null
console.log(cheng(5))
```
报错 cheng is not a function
a是个递归函数 cheng 等于a 执行到内部的时候会调用a(5-1) 但是这时候a 已经被赋值成null了
2
```
function C1(name) {
if (name) {
this.name = name;
}
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'join';
}
C1.prototype.name = 'Tom';
C2.prototype.name = 'Tom';
C3.prototype.name = 'Tom';
alert((new C1().name) + (new C2().name) + (new C3().name));
```
Tomundefinedjoin
new c1 this指向 c1的实例对象没有传参就不执行 this.name的赋值 所以 取name的时候要从原型中取 即tom
c2 new的时候传得值为空 但是没有判断过直接赋值 所以 c2函数中的 this.name 就直接被赋值成了 undefined
c3函数中赋值的时候 判断了name参数是否为空 如果为空的话就赋成默认值 join
3
```
function fn()
{
this.user = '追梦子';
var obj={user:"momo"}
return {};
}
var a = new fn;
console.log(a.user);
```
undefined
new fn 的时候生成 的实例是fn的返回值 也就是{} 空对象
从空对象中找不到 a.user的值
4
```
window.color = 'red';
document.color = 'yellow';
var s1 = {color: 'blue' };
function changeColor(){
console.log(this.color);
}
changeColor.call();
changeColor.call(window);
changeColor.call(document);
changeColor.call(this);
changeColor.call(s1);
```
red
red
yellow
red
blue
call() 不加参数的时候 this指向window其他的参数是谁就指向谁
## 简答题
1. 说明call,apply,bind 的区别
bind 不会立即调用 而是返回一个新函数
call/apply 会立即调用 返回的是函数调用后的结果
call 传参数的时候 函数需要的参数可以一个一个传
apply 函数需要的参数只能写成类数组的形式 [a,b,c]
2. js的typeof的返回值有哪些
number, boolean, string, undefined, object, function,symbol.
3. 说出数组相关的几个方法并说明作用
push() 向数组最后面添加一个元素
pop() 删除数组最后面的元素 并返回这个被删除的值
shift() 删除第一个元素
unshift() 向数组开头添加一个元素
...
4. ajax请求时的get、post的区别
AJAX GET和POST的区别
**ajax** 请求的时候**get 和post** 方式的**区别**? **GET**请求会将参数跟在URL后进行传递而**POST**请求则是作为HTTP消息的实体内容发送给WEB服务器。 **GET**请求有数据长度限制,而**POST**没有。 **GET**方式请求的数据会被浏览器缓存起来,**POST**没有
5. 如何阻止浏览器的默认事件
```
event.preventDefault()
或 return false
```
6. 如何阻止事件冒泡
```
event.preventDefault()
或return false
```
7. == 和===的区别
== 只比较数值大小 不比较数据类型 会发生隐式类型转换
=== 不发生类型转换 会比较数据类型
8. 局部变量和全局变量的区别
全局变量是整个程序都可访问的变量,生存期从程序开始到程序结束;局部变量存在于模块中(比如某个函数),只有在模块中才可以访问,生存期从模块开始到模块结束。
全局变量分配在全局数据段,在程序开始运行的时候被加载。局部变量则分配在程序的堆栈中。因此,操作系统和编译器可以通过内存分配的位置来知道来区分全局变量和局部变量。
## 通过代码实现下面要求(略)
1. 通过原型链实现对象继承
2. js手动实现 jq的链式操作
3. 做一个网页计算器 实现输入两个数 完成加减乘除四则运算
4. 实现一个打点计时器,要求
1、从 start 到 end包含 start 和 end每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1start 和end为用户输入
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
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对应的是日期
6. 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况返回参数 num