首页 > 代码库 > 前端笔试题----JavaScript部分

前端笔试题----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部分