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。