前端面试(二)

转载https://github.com/dwqs/blog/issues/17

1.使用 typeof bar === “object” 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?

使用 typeof 的弊端是显而易见的(这种弊端同使用 instanceof):

let obj = {};

let arr = [];

 

console.log(typeof obj === 'object');  //true

console.log(typeof arr === 'object');  //true

console.log(typeof null === 'object');  //true

从上面的输出结果可知,typeof bar === “object” 并不能准确判断 bar 就是一个 Object。可以通过 Object.prototype.toString.call(bar) ===

“[object Object]” 来避免这种弊端:

let obj = {};

let arr = [];

 

console.log(Object.prototype.toString.call(obj));  //[object Object]

console.log(Object.prototype.toString.call(arr));  //[object Array]

console.log(Object.prototype.toString.call(null));  //[object Null]

另外(1)为了珍爱生命,请远离 ==:(2)[] === false 是返回 false 的。

2--Get()和post()的区别:

(1)get请求会将参数跟在url后进行传递,而post请求则作为http消息的实体内容发送给web服务器。

(2)Get方式对传送的数据大小有限制(通常不能大于2kb),而使用post方式传递的数据要比get方式大的多(理论上不受限制)

(3)Get方式请求的数据会被浏览器缓存出来,因此其他人就可以从浏览器的历史记录中取到这些数据,例如账号和密码,在某些情况下,get方式会带来严重的安全性问题,而post方式相对来说可以避免这些问题。

(4)Get方式和post方式传递的数据在服务器端的获取也不相同,在php中,get方式的数据可以用$_GET[]获取,,而post方式可以用$_POST[]获取,两种方式都可以用$_REQUEST[]来获取。

3--settimeout()和setInterval()的区别

4-js跨域问题

5--文本居中,div垂直居中

6--ES中提供了5类简单数据类型:Undefined,Null,Boolean,Number,String;还有一种复杂数据类型:Object.

typeof操作符用来检测给定变量(也可以是数值字面量)的数据类型,返回值(undefined,boolean,string,number,object,function

var message;

//var age---没定义

var car=null;

alert(message);//undefined

alert(age);//产生错误

alert(typeof message);//undefined

alert(typeof age)//undefined

alert(typeof car);//object

alert(null==undefined)//true--实际上,undefined是派生于null值的

7--声明提升

http://blog.csdn.net/qq673318522/article/details/50810650

变量声明提升:变量声明其实也做提升,只不过赋值不做提升。

:alert(a);//undefined,其实a变量已做声明提升,但是a=3赋值操作并没有,所以是undefined,但如果这里没有没有后面的var a=3;这时会报错,因为没有定义a变量。

var a=3;//相当于2 句话,var a;a=3;

函数声明提升:在执行代码之前会先读取函数声明,这意味着可以把函数声明放在调用它的语句后面。

补充:递归--为避免紧耦合,js中在非严格模式下,可以用arguments.callee来指向正在执行的函数的指针。在严格模型下,可以使用命名函数表达式来达成相同的结果。

8--作用域链:当代码在一个执行环境中执行时,会创建变量对象的一个作用域链,这是保证对执行环境有权访问的所有变量和函数的有序访问。(执行环境:定了变量或函数有权访问的其他数据,决定了它们各自的行为,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中,例web浏览器中,全局执行环境被认为是window对象)

9--闭包:是指有权访问另一个函数作用域中变量的函数,创建闭包的常见方式,就是在一个函数内部创建另一个函数。

10--this:this对象在运行时基于函数的执行环境绑定的,在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此this对象通常指向window(当然,通过calapply改变函数执行环境的情况下,this就会指向其他对象),但有时由于编写闭包的方式不同,这一点可能不会那么明显。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值