js基础知识


1.i++与++i的区别
  i++返回的是自增之前的值,++i返回的则是自增后的值。
2.闭包笔试题
  闭包特点:
    (1)嵌套函数;
    (2)内层函数使用外层函数的局部变量;;
    (3)外层函数将内层函数返回到外部,被全局变量保存住;
  闭包优点:
    (1)保护局部变量不受全局变量污染;
  
 
 function obj(){
    var arr=[];
         
for(var i=0;i<3;i++){       arr.push(function(){return i})     }     return arr;   }
  //arr[function(){return i},
function(){return i},function(){return i}]   

var getObj=obj();   
console.log(getObj[
0]());   //3 
console.log(getObj[
1]());   //3
console.log(getObj[
2]()); //3

首先,上面函数是闭包结构,obj()函数中有两个变量,分别是arr和 i ,由于arr并未在内部函数中使用,所以变量arr不是受保护的局部变量,那么只有 i 是受保护的局部变量;

当for循环执行完成之后,变量 i 最终为3,所以再调用的时候返回3。

3.一道面试题

(function(){
    var a=b=10;
})();
console.log(typeof(b!=='undefined'));   //boolean
console.log(typeof(a!=='undefined'));   //报错
console.log(a);   //报错
console.log(b);  //10
console.log(typeof(b));    //number

这道题中,b是一个全局变量(没有用var声明的变量均属于window);

4.判断一个对象中是否包含某个属性的方法

   (1)hasOwnProperty() 方法; obj.hasOwnProperty('属性')

   (2)‘属性名’  in 对象 ;     if('属性'  in  obj){/doSomething/}

   (3)直接使用obj.属性名 ; if(obj.属性名===undefined){/doSomething/}

  比如:判断一个对象有无indexof属性

var arr=[1,2,3,4,5];

if(!arr.hasOwnProperty("indexof")){

  arr.indexof=function(keyword){

    for(var i=0;i<this.length;i++){

      if(arr[i]==keyword){

        return i;
      }
    }
    return -1;  

  }

}

document.write(arr.indexof('3'));

5.trim()函数;

trim()函数用于去除字符串两端的空白字符。该函数可以去除字符串开始和末尾两端的空白字符(直到遇到第一个非空白字符串为止)。它会清除包括换行符、空格、制表符等常见的空白字符。如果参数str不是字符串类型,该函数将自动将其转为字符串(一般调用其toString()方法)。如果参数str为null或undefined,则返回空字符串("")。

 1 String.prototype.ltrim=function()
 2 {
 3      return this.replace(/(^s*)/g,"");
 4 }
 5 String.prototype.rtrim=function()
 6 {
 7      return this.replace(/(s*$)/g,"");
 8 }
 9 
10 var str="   codePlayer       ";
11 console.log(str.trim());//"codePlayer"
12 console.log(str.ltrim());//"codePlayer     "
13 console.log(str.rtrim());"    codePlayer"

这里附上一个链接,绝对是深度好文,很详细,好东西要分享,嘿嘿  https://mp.weixin.qq.com/s/I7A1iC8Et6uOGZ234DsTlA










原文地址:https://www.cnblogs.com/wj19940520/p/6511236.html