转载: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(当然,通过cal或apply改变函数执行环境的情况下,this就会指向其他对象),但有时由于编写闭包的方式不同,这一点可能不会那么明显。