JavaScript 装逼指南(js另类写法)

下面就是具体的写法,建议大家逐个测试一下,加深印象

1、转Boolean类型

这个较为常用。

!!'a'//true

通过两个取反,可以强制转换为Boolean类型。

!!是将表达式强制转化为bool值的运算,运算结果为true或false,表达式是什么值,结果就是对应的bool值,不再取非。

不是取非再取非的意思!!!

!!false=false;    要注意false和“false” 的区别!!!!!

!!"false"=true;

!!true=true;

!!(NaN || undefined || null || 0 || ' ')=false;

2、转Number类型

String转化为Number;日期输出时间戳。

+'45'//45
+new Date//13位时间戳

会自动转化为Number类型的。日期取时间戳不用new Date().getTime()。

3、parseInt

parseInt这个函数太普通了,怎么能装逼。答案是~~,这种方法还可以将字符串转换成数字类型。向下取整。

~~3.14159//3
~~'5.678'//5
-2.33 | 0 //-2
2.33 >> 0 //2

原理是~是一个叫做按位非的操作,会返回数值的反码,两次取反就是原数。|为位运算符,两个位只要有一个为1,那么结果都为1,否则就为0。>>运算符执行有符号右移位运算。都是二进制操作。 原因在于JavaScript中的number都是double类型的,在位操作的时候要转化成int。

4、短路表达式,弃用if-else

反面示例:

if () {
// ...
} else if () {
// ...
} else {
// ...
}

用 || 和 &&来简化if-else 。有时候用 !! 操作符也能简化if-else模式。例如这样:

let a = b || 1;//b为真,a=b;b为假,a=1;
let c = b && 1;//b为真,c=1;b为假,c=b;
// 使用!!符号
let isValid = !!(value && value !== 'error');

“!”是取反操作,两个“!”自然是负负得正了。比较常用的是||。

5、另外一种undefined

let data = void 0; // undefined

void 运算符 对给定的表达式进行求值,然后返回 undefined。
那为什么要用void 0,不直接undefined呢? undefined在javascript中不是保留字。因此在IE5.5~8中我们可以将其当作变量那样对其赋值(IE9+及其他现代浏览器中赋值给undefined将无效)。采用void方式获取undefined更准确。

6、保留指定位数的小数点

let num = 2.443242342;
num = num.toFixed(4); //"2.4432"

注意, toFixed() 方法返回的是字符串而不是一个数字。

7、单行写一个评级组件

let rate = 3;
"★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);//"★★★☆☆"

slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分stringObject.slice(start,end)

8、金钱格式化

//正则
let cash = '1234567890'
cash.replace(/\B(?=(\d{3})+(?!\d))/g, ',');//"1,234,567,890"
//非正则的优雅实现
function formatCash(str) {
 return str.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的倍数的位置就增加',',最后返回累加的字符串。

9、标准JSON的深拷贝

let a = {
 a1: 1,
 b1: { c: 1, d: 2 }
};
let b=JSON.parse(JSON.stringify(a));
b;//{a1: 1, b1: {…}}

不考虑IE的情况下,标准JSON格式的对象蛮实用,不过对于undefined和function的会忽略掉。

10、数组去重

阿里面试官,喜欢问这个问题。

let array=[1, "1", 2, 1, 1, 3];
//拓展运算符(...)内部使用for...of循环
[...new Set(array)];//[1, "1", 2, 3\]
//利用Array.from将Set结构转换成数组
Array.from(new Set(array));//[1, "1", 2, 3\]

传统的方法,循环遍历:排序sort()后前一下与后一个比较==;在数组中用indexOf判断,利用includes,利用filter;这些方法感觉都过时了,还是用ES6中利用Set去重比较牛。

11、取数组中的最大值和最小值

Math.max方法可以求出给定参数中最大的数。

 Math.max('1','2','3.1','3.2');//3.2
 Math.min(1,0,-1);//-1

但如果是数组,就不能这样调用了。此时就用到了apply方法。Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的用途。所有函数都有apply(作用域链,参数)这个方法,当作用域链为null时,默认为上文,这个函数的“参数”,接收一个数组。

let arr = ['1','2','3.1','3.2',0,-1];
//用apply方法
Math.max.apply(null, arr);//3.2
Math.min.apply(Math, arr);//-1
//用拓展运算符
Math.max(...arr);//3.2
Math.min(...arr);//-1

以上就是JavaScript 装逼指南(js另类写法)的详细内容,更多关于js装逼写法的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用JavaScript switch case 另类写法

    习惯了C#的语法,遇到多分支调用的情况,除了最简单的if-else,那么就是switch-case了,所以使用JavaScript的时候就很容易会写出下面这样的代码: 复制代码 代码如下: // JScript source code //something的值是1.2.3... switch (something) { case 1: todoA(); break; case 2: todoB(); break; case 3: todoC(); break; //... } 这样的代码本身也

  • js另类写法

    实现功能估计貌似于这样: var a = function(s){alert(s)}; var b = function(s){confirm(s)}; var aa = [a,b]; aa[1](1); aa[0](2); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 代码运行到 test() 后,要调用已经写好的方法 E() 并传递 2 个参数 一个就是所谓对象的 ju . 另一个就是一个才写的函数 然后把这两个参数传递到了 E() 方法,当然,E()方法已经在等参数了 当他等

  • 你不知道的 javascript【推荐】

    一.对象 JavaScript简单类型有数字.字符串.布尔值.null.undefined,其他所有的值都是对象(数组.函数.正则表达式都是对象). 数字.字符串.布尔值虽然拥有方法(包装对象),但并不是对象. 包装对象: 每当读取一个基本类型值的时候,后台会创建一个对象的基本包装类型的对象,从而能够调用一些方法来操作这些数据. var s1 = 'abcdefg' ; var s2 = s1.substring(2) ; 后台自动完成下列处理: 创建String类型的一个实例 在实例上调用指定

  • 详解JavaScript的另类写法

    JavaScript 是属于网络的脚本语言! JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaScript 是因特网上最流行的脚本语言. JavaScript 很容易使用!你一定会喜欢它的! JavaScript一种解释型的脚本语言,语法灵活,让不同的人对同一个功能有很多种不同的写法.怎样组织JavaScript代码才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句"原来还可以这样写"呢? 匿名

  • Javascript中定义方法的另类写法(批量定义js对象的方法)

    复制代码 代码如下: isArray : function(v){ return toString.apply(v) === '[object Array]'; }, isDate : function(v){ return toString.apply(v) === '[object Date]'; }, isObject : function(v){ return !!v && Object.prototype.toString.call(v) === '[object Object]

  • JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    1. 类型强制转换 1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判断是否为NaN,因为 NaN !== NaN '32' * 1 // 32 'ds' * 1 // NaN null * 1 // 0 undefined * 1 // NaN 1 * { valueOf: ()=>'3' } // 3 常用: 也可以使用+来转化字符串为数字 + '123' // 1

  • JavaScript 装逼指南(js另类写法)

    下面就是具体的写法,建议大家逐个测试一下,加深印象 1.转Boolean类型 这个较为常用. !!'a'//true 通过两个取反,可以强制转换为Boolean类型. !!是将表达式强制转化为bool值的运算,运算结果为true或false,表达式是什么值,结果就是对应的bool值,不再取非. 不是取非再取非的意思!!! !!false=false;    要注意false和"false" 的区别!!!!! !!"false"=true; !!true=true;

  • JavaScript基础语法之js表达式

    本文将详细介绍javascript表达式,表达式分为原始表达式和复杂表达式.一般,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression). 原始表达式(primary exression) 原始表达式是表达式的最小单位--它不再包含其他表达式.javascript中的原始表达式包括this关键字.标识符引用.字面量引用.数组初始化.对象初始化和分组表达式 PrimaryExpres

  • JavaScript创建命名空间的5种写法

    在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: 复制代码 代码如下: var sayHello = function() {   return 'Hello var'; }; function sayHello(name) {   return 'Hello function'; }; sayHello(); 最终的输出为 复制代码 代码如下: > "Hello var" 为什么会这样,根据 StackOv

  • js命名空间写法示例

    本文实例分析了js命名空间写法.分享给大家供大家参考,具体如下: 很早知道这种写法,由于基础面向对象不够扎实一直在回避,但是面对整站这种方法还是有必要会 html部分: <div id="div1">111</div> <div id="div2">现实</div> <div id="div3">层</div> <div class="tab">

  • javascript实现动态导入js与css等静态资源文件的方法

    本文实例讲述了javascript实现动态导入js与css等静态资源文件的方法.分享给大家供大家参考.具体实现方法如下: /** * 动态导入静态资源文件js/css */ var $import = function(){ return function(rId, res, callback){ if(res && 'string' == typeof res){ if(rId){ if($($('#' + rId), $('head')).length>0){ return; }

  • 使用javaScript动态加载Js文件和Css文件

    JS动态加载CSS 在可换主题的界面中具有很重要的意义,用户可以根据自己的浏览习惯选择自己喜欢的页面显示方式,下面详细说明. 希望下面的方法对你有帮助. (1)使用JavaScript动态加载Js文件 /*JavaScript动态加载Js文件*/ var scriptNode = document.createElement('script'); scriptNode.src = 'proxy.js?t='+new Date().getTime();/*附带时间参数,防止缓存*/ documen

  • 今天是星期几的4种JS代码写法

    第一种写法 复制代码 代码如下: var str = "";  var week = new Date().getDay();  if (week == 0) {          str = "今天是星期日";  } else if (week == 1) {          str = "今天是星期一";  } else if (week == 2) {          str = "今天是星期二";  } else

随机推荐