面试经典

来源:互联网 发布:淘宝天猫运营外包 编辑:程序博客网 时间:2024/06/03 09:25

get和post请求的区别

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。GET请求的数据会暴露在地址栏中,而POST请求则不会。

2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

数组去重

利用indexOf方法;

var aa=[1,3,5,4,3,3,1,4]function arr(arr) {  var result=[]  for(var i=0; i<arr.length; i++){    if(result.indexOf(arr[i])==-1){      result.push(arr[i])    }  }  console.log(result)}      arr(aa)
//利用splice()方法 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5]; 3 function removeDuplicatedItem(arr) { 4    for(var i = 0; i < arr.length-1; i++){ 5        for(var j = i+1; j < arr.length; j++){ 6            if(arr[i]==arr[j]){ 8              arr.splice(j,1);//console.log(arr[j]); 9               j--;10            }11        }12    }13    return arr;14 }15 16 arr2 = removeDuplicatedItem(arr);17 console.log(arr);18 console.log(arr2);

数组排序

function compare(value1,value2){return value1-value2}var arr=[0,54,21,3,56]arr.sort(compar)

伪数组(类数组):

无法直接调用数组方法或期望length属性有什么特殊的行为,不具有数组的push,pop等方法,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(伪数组)将数组转化为真正的Array对象。
  var args = Array.prototype.slice.call(arguments); //为了使用unshift数组方法, 将argument转化为真正的数组        args.unshift('app');

这里把符合以下条件的对象称为伪数组:

1,具有length属性

2,按索引方式存储数据

3,不具有数组的push,pop等方法

使用Array.prototype.slice.call();

Array.prototype.slice.call({   0:"likeke",   1:12,   2:true,   length:3  });  //["likeke", 12, true] 

使用[].slice.call(),了解js原型链的都知道,实际上这种方法和第一中方法是一样的,但上面第一种方式相对效率更高。

[].slice.call({   0:"likeke",   1:12,   2:true,   length:3  });  //["likeke", 12, true]  

使用ES6中Array.from方法;

Array.from({   0:"lk",   1:12,   2:2013,   3:"长安大学",   length:4  });  //["lk", 12, 2013, "长安大学"]  

javascript面向对象(给对象添加属性和方法的方式)

在定义对象时,直接把属性和方法添加,<script type="text/javascript">        //给对象直接在定义时添加属性和方法        var g = {                    name:"张三",                    age:23,                    sum:function(i,j)                    {                        return i+j;                    }                };            alert(g.name);            alert(g.age);            alert(g.sum(20,25));    </script>2 通过原型prototype模式给对象添加属性和方法,<script type="text/javascript">        //应用原型,添加成员变量        //创建一个构造函数或者类        var People = function(){};        //创建对象,通过构造函数        var p1 = new People();        var p2 = new People();        //通过原型prototype 给People类的所有对象添加成员变量        var pt = People.prototype;        pt.name = "明铭";        pt.age = 23;        //通过原型prototype,给People添加方法        pt.add = function(i,j)                         {                            return i+j;                         }        alert(p1.name);        alert(p2.age);        alert(p1.age == p2.age);        alert(p2.add(20,20));        //People不是静态成员,因此不能直接调用属性(输出undefind)        alert(People.age);    </script>