前端笔试题----JavaScript部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端笔试题----JavaScript部分相关的知识,希望对你有一定的参考价值。

 1、js有哪些内置对象?

对象名称 对象说明
Arguments 函数参数集合
Array 数组
Boolean 布尔对象
Date 日期时间
Error 异常对象
Function 函数构造器
Math 数学对象
Number 数值对象
Object 基础对象
RegExp 正则表达对象
String 字符串对象

2、this对象的理解?

  

3、eval是做什么的?

eval() 函数可计算某个字符串,并执行其中的的 javascript 代码。

<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
</script>
//输出:
200
4
27

 

4、DOM怎样添加、移除、移动、复制、创建和查找节点?

一些常用的 html DOM 方法:

  • getElementById(id) - 获取带有指定 id 的节点(元素)
  • appendChild(node) - 插入新的子节点(元素)
  • removeChild(node) - 删除子节点(元素)

一些常用的 HTML DOM 属性:

  • innerHTML - 节点(元素)的文本值
  • parentNode - 节点(元素)的父节点
  • childNodes - 节点(元素)的子节点
  • attributes - 节点(元素)的属性节点

技术分享

cloneNode() 复制节点


5、null和undefied的区别?

undefined表示变量声明但未初始化时的值

null表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null值表示一个空对象指针

null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

Number(undefined)
// NaN

5 + undefined
// NaN

null + 5
// 5

 null

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

undefined

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

Object.getPrototypeOf(Object.prototype)
// null

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined

http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

6、new操作符具体干了什么呢?

首先上一一个简单的 new 操作符实例

var Person = function(name){
    this.name = name;
    this.say = function(){
        return "I am " + this.name;
    };
}
var nyf = new Person("nyf");
nyf.say();
简单来说,上述例子中,以 new 操作符调用构造函数的时候,函数内部发生以下变化:
  1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
  2、属性和方法被加入到 this 引用的对象中。
  3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
 
以上情况在 new 操作符调用下,后台就相当于 
var Person = function(name){
    //var this = {};
    this.name = name;
    this.say = function(){
        return "I am " + this.name;
    };
    //return this;
}
对于以上的讲述不知道有没有讲清楚。
 
var obj = new Base();
 
相当于运行以下代码
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
对于ES5中添加了 Object.create(),
if(typeof Object.create !== "function"){
    Object.create = function(o){
        function F(){};
        F.prototype = o;
        return new F();
    }
}

7、JSON的了解?

是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

    本文主要是对JS操作JSON的要领做下总结。

    在JSON中,有两种结构:对象和数组。

    1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

    var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};

    2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

    例如:

    var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];

    为了方便地处理JSON数据,JSON提供了json.js包,下载地址:http://www.json.org/json.js

    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

    JSON字符串:

    var str1 = ‘{ "name": "cxh", "sex": "man" }‘;

    JSON对象:

    var str2 = { "name": "cxh", "sex": "man" };

    一、JSON字符串转换为JSON对象

    要运用上面的str1,必须运用下面的要领先转化为JSON对象:

    //由JSON字符串转换为JSON对象

    var obj = eval(‘(‘ + str + ‘)‘);

或者

    var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

    或者

    var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

    然后,就可以这样读取:

    Alert(obj.name);

    Alert(obj.sex);

    特别留心:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

    二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

    例如:

    var last=obj.toJSONString(); //将JSON对象转化为JSON字符

    或者

    var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

    alert(last);

    留心:

    上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。

8、call()和apply()的区别和作用?

Javascript的每个Function对象中有一个apply方法:

function.apply([thisObj[,argArray]])

还有一个类似功能的call方法:

function.call([thisObj[,arg1[, arg2[, [,.argN]]]]])

 

它们各自的定义:

apply:应用某一对象的一个方法,用另一个对象替换当前对象。

call:调用一个对象的一个方法,以另一个对象替换当前对象。

它们的共同之处:

 用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。”

它们的不同之处:

apply:

最多只能有两个参数——新this对象和一个数组 argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj,并且无法被传递任何参数。

call:

则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

更简单地说,apply和call功能一样,只是传入的参数列表形式不同:如 func.call(func1,var1,var2,var3)   对应的apply写法为:func.apply(func1,[var1,var2,var3])

也就是说:call调用的为单个,apply调用的参数为数组

 

function sum(a,b){
    console.log(this === window);//true
    console.log(a + b);
 }
 sum(1,2);
 sum.call(null,1,2);
 sum.apply(null,[1,2]);

作用  

a、调用函数

var info = ‘tom‘;
function foo(){
    //this指向window 
    var info = ‘jerry‘;
    console.log(this.info);  //tom
    console.log(this===window)   //true
}
foo(); 
foo.call();
foo.apply(); 

 

b、call和apply可以改变函数中this的指向  

var obj = {
        info:‘spike‘
};
foo.call(obj);    //这里foo函数里面的this就指向了obj
foo.apply(obj);

 

c、借用别的对象的方法
求数组中的最大值
var arr = [123,34,5,23,3434,23];
//方法一
var arr1 = arr.sort(function(a,b){
    return b-a;
});
console.log(arr1[0]);
//方法二
var max = Math.max.apply(null,arr)   //借用别的对象的方法
console.log(max);

 

9、如何获取UA?

 

10、介绍下Java和JavaScript的区别?

11、你有哪些性能优化的方法?

http://blog.csdn.net/mahoking/article/details/51472697

12、哪些常见的操作会造成内存泄漏?

http://www.cnblogs.com/chuaWeb/p/5196330.html

13、线程与进程的区别?

线程是进程中的一部分,进程包含多个线程在运行

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

子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。

 




以上是关于前端笔试题----JavaScript部分的主要内容,如果未能解决你的问题,请参考以下文章

<转>网易2016实习生前端笔试题部分总结

前端工程师面(笔)试题部分汇总

前端笔试题

前端笔试题总结

前端整理——javaScript部分

ThoughtWorks西邮暑期特训营--JavaScript在线笔试题