JavaScript相关面试题

一、整理前端面试题—JavaScript

  1. 介绍js的基本数据类型
    Undefined、Null、Boolean、Object、Number、String

  2. js有哪些内置对象?
    数据封装类对象:Object、Array、Boolean、Number 和 String
    其他对象:Function、Argument、Math、Date、RegExp、Error

  3. this对象的理解
    this总是指向函数的直接调用者(而非间接调用者);
    如果有new关键字,this指向new出来的那个对象;
    在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;

  4. eval是做什么的?
    是把对应的字符串解析成JS代码并运行;
    缺点: 避免使用eval,不安全,非常耗性能(2次,一次解析成JS代码,一次执行)。

由JSON字符串转换为JSON对象的时候可以使用eval,

var obj = eval('('+ str +')');
  1. DOM怎样添加、移除、移动、复制、创建和查找节点
//创建新节点
createDocumentFragment()  //创建一个DOM片段
createElement()		//创建一个具体的元素
createTextNode()	//创建一个文本节点

//添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore()	//在已有的子节点前插入一个新的子节点

//查找
getElementsByTagName()	//通过标签名称
getElementsByName()	//通过元素的name属性的值
getElementById()	//通过元素Id,唯一性
  1. null和undefined的区别?
    null 是一个表示“无”的对象,转为数值时为0;
    undefined 是一个表示“无”的原始值,转为数值时为NaN。
    undefined:
    (1) 变量被声明了,但没有赋值时,就等于undefined。
    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
    (3) 对象没有赋值的属性,该属性的值为undefined。
    (4) 函数没有返回值时,默认返回undefined。
    null:
    (1) 作为函数的参数,表示该函数的参数不是对象。
    (2) 作为对象原型链的终点。

  2. new操作符具体干了什么呢?
    (1) 创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
    (2) 属性和方法被加入到this引用的对象中。
    (3) 新创建的对象由this所引用,并且最后隐式的返回this。

  3. JSON的了解?
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 它是基于JavaScript的一个子集。数据格式简单,易于读写,占用宽带小。
    格式: 采用键值对,例如{'age':'12','name':'back'}

  4. call() 和 apply() 的区别和作用?
    apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。
    例如:function.apply(this,[1,2,3]);
    call() 的第一个参数是上下文,后续是实例传入的参数序列。
    例如function.call(this,1,2,3);

  5. 如何获取UA(user Agent)用户代理?

<!DOCtype html>
<html>
<head>
	<title></title>
</head>
<body οnlοad="whatBrowser()">
	<script> 
function whatBrowser() {  
document.Browser.Name.value=navigator.appName;  
document.Browser.Version.value=navigator.appVersion;  
document.Browser.Code.value=navigator.appCodeName;  
document.Browser.Agent.value=navigator.userAgent;  
}  
</script> 
<table> 
<form name="Browser"> 
<tr> 
<td> 浏览器名称: </td> 
<td> <input type="txt" name="Name" size="110%"></td> 
</tr> 
<tr> 
<td> 版本号:</td> 
<td> <input type="txt" name="Version" size="110%"></td> 
</tr> 
<tr> 
<td> 代码名称: </td> 
<td> <input type="txt" name="Code" size="110%"></td> 
</tr> 
<tr> 
<td> 用户代理标识:</td> 
<td> <input type="txt" name="Agent" size="110%"></td> 
</tr> 
</form> 
</table> 
</body>
</html>

二、其他

1.http状态码

100 Continue继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息表示确认,之后发送具体参数信息

200 OK正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 拂去已接受请求,但尚未处理

301 Moved Permanently 请求的网页已永久移动到新位置。

302 Found 临时性重定向。

303 See Other 临时性重定向,且总是使用GET请求新的URL

304 Not Modified 自从上次请求后,请求的网页未修改过。

400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

401 Unauthorized 请求为授权

403 Forbidden 禁止访问。

404 Not Found 找不到如何与URL相匹配的资源。

500 Internal Server Error 最常见的服务器端错误。

503 Service Unavailable 服务端暂时无法处理请求(肯是过载或维护)。

  1. 你有哪些性能优化的方法?
    (1) 减少http请求的次数:CSS Sprites,JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存,图片服务器。
    (2)前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    (3)用innerHTML代替DOM操作,减少DOM操作次数,优化JavaScript性能。
    (4)当需要设置的样式很多时设置className而不是直接操作style。
    (5)少用全局变量,缓存DOM节点查找的结果。减少IO读取操作。
    (6)避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    (7)图片预加载,将样式放在顶部,将脚本放在底部 加上时间戳。

  2. 什么叫优雅降级和渐进增强?
    优雅降级:graceful degradation
    一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
    渐进增强:progressive enhancement
    针对低版本浏览器进行构建页面,保证最基本的功能,然后在针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

三、线程和进程的区别

一个程序至少有一个进程,一个进程至少有一个线程。

线程的划分尺度小于进程,是的多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效果。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个进程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值