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