JavaScript怎么写才更霸气?你怎么能让别人看出你不简单?是不是很期待别人看完你的代码感叹“原来可以这样写”?下面列举一些JavaScript中的装逼技巧,也可以说是非常实用了。转换为布尔类型是比较常用的。!!'a'//true可以通过两次取反转换为Boolean类型。将Number类型的String转换为Number;日期输出时间戳。+'45'//45+newDate//13位时间戳会自动转换为Number类型。日期取时间戳,不带newDate().getTime()。parseIntparseInt函数太普通了,怎么可能装得下。答案是~~,这个方法也可以将字符串转成数值类型。向下舍入。~~3.14159//3~~'5.678'//5-2.33|0//-22.33>>0//2的原理是~是一个叫做按位取反的操作,会返回值的补码,两次求反就是原数。|是按位运算符,只要两位中有一位为1,则结果为1,否则为0。>>运算符进行有符号右移运算。两者都是二元运算。原因是JavaScript中的数字都是double类型,位运算时需要转成int。短路表达式,弃用if-else反例:if(){//...}elseif(){//...}else{//...}使用||和&&来简化if-else。有时使用!!运算符还可以简化if-else模式。例如:令a=b||1;//b为真,a=b;b为假,a=1;letc=b&&1;//b为真,c=1;b为假,c=b;//使用!!symbolletisValid=!!(value&&value!=='error');“!”是否定运算,两个“!”自然是消极的和积极的。比较常用的是||。另一个undefinedletdata=void0;//undefinedvoid运算符计算给定的表达式并返回undefined。那为什么直接用void0而不是undefined呢?undefined不是javascript中的保留字。因此,在IE5.5~8中,我们可以将其赋值为变量(在IE9+等现代浏览器中赋值为undefined将无效)。使用void方法获取undefined更准确。保留指定位数的小数点letnum=2.443242342;num=num.toFixed(4);//"2.4432"请注意,toFixed()方法返回的是字符串而不是数字。在一行中写一个评级组件letrate=3;"★★★★★☆☆☆☆☆".slice(5-rate,10-rate);//"★★★☆☆"slice()方法可以提取字符字符串的某一部分,并返回提取部分作为新字符串stringObject.slice(start,end)moneyformatting//regularletcash='1234567890'cash.replace(/\B(?=(\d{3})+(?!\d))/g,',');//"1,234,567,890"//一个非常规的优雅实现函数formatCash(str){returnstr.split('').reverse().reduce((prev,next,index)=>{return((index%3)?next:(next+','))+prev})}formatCash(cash);//"1,234,567,890"不规则的方法,先把字符串转成数组,然后反转变成[0,9,8,7,6,5,4,3,2,1]。然后对新数组进行reduce操作,将数组的元素位置除以3取余,在3的倍数位置加上',',最后返回累加的字符串。标准JSON的深拷贝leta={a1:1,b1:{c:1,d:2}};让b=JSON.parse(JSON.stringify(a));b;//{a1:1,b1:{...}}标准JSON格式的对象在不考虑IE的情况下还是比较实用的,但是undefined和function对象会被忽略。数组去重阿里面试官很喜欢问这个问题。让数组=[1,"1",2,1,1,3];//扩展操作符(...)内部使用for...of循环[...newSet(array)];//[1,"1",2,3]//使用Array.from来将Set结构转换成数组Array.from(newSet(array));//[1,"1",2,3]传统方法,循环遍历:排序后sort(),比较上一个和下一个一个==;在数组中使用indexOf判断,使用includes,使用filter;这些方法感觉过时了,用ES6中的Set去重比较。取数组中的最大值和最小值Math.max方法可以找到给定参数中最大的数。Math.max('1','2','3.1','3.2');//3.2Math.min(1,0,-1);//-1但是如果是数组就不能是这样叫的。此时使用apply方法。Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的目的。所有函数都有apply(scopechain,parameter)方法。当作用域链为空时,默认为上述。该函数的“参数”接收一个数组。让arr=['1','2','3.1','3.2',0,-1];//使用apply方法Math.max.apply(null,arr);//3.2Math.min.apply(Math,arr);//-1//使用展开运算符Math.max(...arr);//3.2Math.min(...arr);//-1
