您的位置:首页 > Web前端 > JavaScript

前端面试系列之---javascript基础和数据类型

2017-09-02 10:33 676 查看

无向图 有向图

无向图的顶点个数为n,则该图最多有n(n-1)/2条边

有相图的顶点个数为n,则该图最多有n(n-1)条边

对于无向图来说,任意每对顶点最多贡献一条边,所以对于n个结点的无向图来说,边的最大个数满足组合公式C(n,2),

操作系统 死锁

死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

系统产生死锁的四个必要条件:

1)     互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2)    请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3)    不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4)    环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

银行家算法:我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

ECMAScript和JavaScript的关系

ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现

javaScript包含核心(ECMAScript)、文档对象模型(DOM)、游览器对象模型(BOM)

Bind()函数

http://www.cnblogs.com/xxxxBW/p/4914567.html

事件冒泡

概念:事件从最深的节点开始,逐步向上传播事件。举个例子,页面上有这么一个节点树,div>ul>li>a,比如给最里面的a加一个click事件,那么事件执行顺序是a>li>ul>div。

 

事件代理

http://www.cnblogs.com/liugang-vip/p/5616484.html

概念:利用事件冒泡,指定一个事件处理程序,来管理某一个类型的所有事件。

形象描述:收快递例子,公司三个同事周一上午都要收快递,全部委托给前台代为签收。新来的员工周一上午有快递也委托给前台代为签收。

为什么用事件代理:假设页面中有100个li需要绑定同一个click事件,逐一添加事件处理程序,会造成DOM交互过于频繁,影响页面性能。

 

场景:ul里面有100个li,给每个li添加click事件。

传统方法:循环遍历ul里面的li,给每个li添加click事件。

事件代理的处理方法:给最外层的ul添加click事件,最里面的li点击的时候,事件冒泡,都会触发。

出现的问题:点击li和ul都会触发事件。

解决方法:event.target或者IE的event.srcElement。判断触发click事件的事件源的nodeName属性是否是li。

数组和类数组

Js中支持1.类名【属性名】=值 2.类名.属性名=值

只要有length属性,其他属性名均为number类型就是类数组

Var a= {‘1’:’gg’,’2’:’love’,’3’:’meimei’,length:5};

Javascript中常见的就是arguments对象和DOM方法的返回结果。

类数组表现:

var a = {'0':'a', '1':'b', '2':'c', length:3};  // An array-like object

Array.prototype.join.call(a, '+'');  // => 'a+b+c'

Array.prototype.slice.call(a, 0);   // => ['a','b','c']: true array copy

Array.prototype.map.call(a, function(x) {

    returnx.toUpperCase();

});                                 // =>['A','B','C']:

类数组转化为数组:

有时候处理类数组对象的最好方法是将其转化为数组。

Array.prototype.slice.call(arguments)

然后就可以直接使用数组方法啦。

var a = {'0':1,'1':2,'2':3,length:3};

var arr = Array.prototype.slice.call(a);//arr=[1,2,3]

js 函数调用 apply式

js中函数调用四种模式:函数式、方法式、构造器式、apply式。

使用apply模式,可以任意操作this的意义,如果apply使用null,就是函数模式,this就是全局对象;如果使用对象,就是方法模式,this指当前对象;

// js1.js 文件中

var func1 = function() {

    this.name = "程序员";

};

func1.apply(null);

alert(name);

// js2.js 文件

var func2 = function() {

    this.name = "程序员";

};

var o = {};

func2.apply(o);

alert(o.name);

第一段代码name已经加载到全局对象window中;而第二段代码name是在传入的o{}对象中,第一个是函数调用,第二个是方法调用;

Js中typeof能得到哪些类型?

值类型vs引用类型

http://www.jb51.net/article/65911.htm

值类型:Undifined、Null、Boolean、Number和String  存在栈中

var a =
100;
var b = a;
console.log(b);
a= 200;
console.log(b);

 

引用类型:对象、数组、函数。无限量添加属性

栈中保存的只是一个对象在堆内存的地址的引用。

var a ={age:10};
var b =a;
b.age = 20;
console.log(a.age);


var a = "myobject";

a =a.substring(3,5)

console.log(a);// bj

记住这样做,就没有改变String字符串"myobject",只a引用了另一个字符串"bj","myobject"被回收了。所以可以这样讲,String实际上并不符合上面两种数据类型分类。它是具有两方面属性介于两都之间的一种特殊类型。

指针!引用类型a和b都指向这个对象;值类型只是把变量的地址赋值为多少

Typeof运算符详解

typeof
操作符返回一个
字符串
,
指示未
计算的操作数的类型


Undefined


Function


Number


String


Boolean


Object(Array、Object、Null)


 

变量计算-强制类型转换

字符串拼接

var a =100 + 10;
var b = 100+"10";
console.log("a:"+typeof a +" "+a);//a:number 110
console.log("b:"+typeof b+" "+b);//b:string 10010

number转化成string

==运算符

100 == '100';//true
0 == '';//true
null == undefined;//true

 

If语句

var b = 100;
if(b){
   
}
var c = '';
if(c){
   
}

 

逻辑运算

Javascript中将一个变量转为成布尔类型的方法:

var a = 100;
console.log(!!a);//true

 

Javascript中 == 和 === 的区别

http://blog.csdn.net/l_user/article/details/52460512

一.对于stringnumber等基础类型来说,== 和 === 是有区别的。

1.     不同类型比较,==转化成同一类型,看值是否相等;===类型不同,不等。

2.     同一类型,直接值比较;==和===结果一样。

       二.对于array object等高级类型 == 和 === 是没有区别的

当一个变量定义为array和一个变量定义为object类型是,如果值相同,== 和 ===是没有区别的,因为是进行指针地址比较。

       三.基础类型和高级类型比较,== 和 ===是有区别

            == 是将高级类型转化成基础类型,比较

            === 因为类型不同,false

 

Null = = undefined    //true

console.log(true == undefined);
null 表示没有对象,此处不应该有值,用法是
1.对象原型链的终点
2.作为函数的参数,表示该函数的参数不是对象
Object.getPrototypeOf(Object.prototype)
// null

undefined 表示缺少值,此处应该有一个值,但是没有定义,用法就是
1.变量声明了,但是么有赋值
2.函数有参数,但是没有提供,就是undefined
3.对象还没有赋值的属性,就是undefined
4.函数没有返回值时,默认返回undefined
var i;
i // undefined

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

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

var x = f();
x // undefined

 

何时使用===何时使用==?

if(obj.a == null){
    //这里相当于 obj.a === null || obj.a === undefined ,简写形式
    //这是jquery源码中推荐的写法
}
//除了这个,其他都是 ===

 

Js中有哪些内置函数?

常规函数 alert eval isNan parseInt

Object

Function

String字符串函数

Boolean

Number

Math 数学函数max  min sqrt random

RegExp

Array数组函数 join  length sort  reverse

Date日期函数 getDate  setDate

Js变量按照存储方式分为哪些类型?并描述其特点?

值类型和引用类型

….

如何理解json?

//        JSON只不过是一个js对象
        var a1 = JSON.stringify({a:20,b:10});
        console.log(a1);
        var b1 = JSON.parse('{"a":20,"b":10}');
        console.log(b1);

 

 

 

 

如何准确判断一个对象是数组类型

 

写一个原型链继承的例子

描述new一个对象的过程

Zepto或其他框架源码是如何实现原型链的

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: