当前位置: 首页 > 科技观察

一些你可能不知道的JavaScript小窍门和窍门

时间:2023-03-12 13:02:07 科技观察

这里是之前出现在各种书籍和文章中的一些学习JS的技巧,分享给大家,也供大家自己参考。同时感谢发现、创造和分享这些技能的前辈们和大牛们。1.遍历一个obj的属性到数组vara=[];  for(a[a.length]inobj);  return;  乍一看可能会比较乱,其实不然仔细分析后难以理解。常见的用法是for(varkeyinobj),其中key一开始是未定义的,a[a.length]也是整体未定义的,所以两者其实是等价的。在for循环中,obj的属性会依次赋值给key,也会依次赋值给a[a.length],这里的长度是一直在变化的,所以巧妙的将它们赋给了数组的每个元素一。2.重复字符串(如abc=>abcabc)函数repeat(target,n){return(newArray(n+1).join(target));}  改进版:functionrepeat(target,n){returnArray.prototype.join.call({length:n+1},target);//之所以创建一个带length属性的对象是因为调用数组原型方法时,必须是类数组对象,而条件类数组对象即length为非负整数}  并没有新建数组,而是将其替换为具有length属性的对象,然后调用数组的join方法,大大提高性能    然后再改进:目标);}})();使用闭包来缓存对象和join方法3.在for循环中,当第二项为false时,循环将终止。这里可能没有比较,直接赋值即可。如果赋值给undefined之类的,去bool值也是false,所以也会终止。比如遍历一个数组可以写成:for(vari=arr.length,element;element=arr[—-i];){…}  这里,第二项一定是arr[——-i]而不是arr[i--]。如果是后者,则为undefined,不执行循环体,或者for(vari=0,element;element=arr[i++];){...}4。NaN是JS中唯一不等于自身的值,所以可以用它来判断一个变量是否真的是NaN:a!==a5、"<"、"+"等运算符会强制两边symbol表达式中的表达式执行valueOf,然后比较,所以如果两边都是函数或者对象,重写了对象的valueOf方法,两边的方法都会自动执行。如:vara={valueOf:function(){console.log("aaa");}},b={valueOf:function(){console.log("bbb");}};a