前言
JavaScript 作为一门弱类型语言,具有很强的灵活性,因此每个人的编程习惯都可能不同。这也导致了各种奇特的编程方式。这里所说的“奇葩”,实际上是指那些罕见的、很少人使用的写法,但仍然有人会这样写。让我们来盘点一些 JavaScript 中奇怪的写法,虽然它们不一定是好的写法,也不建议大家使用,但了解这些内容可以为我们阅读他人编写的代码提供一些知识储备,同时我们应该倡导编写简洁且易读的代码。
写法一
在函数面前加叹号
!function a(){
alert("luyuz.cn")
}();
在函数前面添加感叹号表示该函数会被立即执行,无需手动调用,相当于 (function a(){alert("luyuz.cn")})()
。除了添加感叹号外,在函数前面添加一元操作符 +
、-
、~
以及 void
也可以实现立即执行的效果,但它们的返回值与正常函数的 undefined
不同。
写法二
两个感叹号 !!
和三个感叹号 !!!
if(!!nothing){
console.log("我不知道我是什么类型!");
console.log(!!nothing);
}
!!
一般用来将后面的表达式转换为布尔型的数据 ( boolean ) 因为 javascript 是弱类型的语言(变量没有固定的数据类型)所以有时需要强制转换为相应的类型,同样的 !!!
就是两个感叹号运算的取反。负负得正,正负得负的道理。
写法三
~~,|
到底是什么?
var a=8.65456459;
console.log(~~a);//结果是8
console.log(a|0);//结果是8
console.log(a|3);//结果是11
~~
简单来说就是去除小数部分,单纯的去掉,不做四舍五入操作,a|0
也是如此,a|0
表示把 a 去除小数部分再加上 |
右边的数字。
写法四
代码之前加了个分号(;)
;function(){
console.log("you are son of bitch!")
};
在 JavaScript 的语法中,分号是可以省略的,但这种机制可能会导致意外的错误。为了避免代码在上线后被合并压缩成一个文件时出现语法错误,建议加上分号,以避免一些潜在的问题。
写法五
一句话代码到底是怎么写成的
((a===1) && (true,a=2)) || ((a===3) && (true,a=4)) || (a=5)
(a===1 ) ? a=2 : ( (a===3) ? (a=4) : (a=5) )
&&
表示前面的代码成立时就运行后面的代码,||
则刚好相反,表示前面的代码不成立时就运行后面的代码,?
表示前面的代码成立时就运行后面代码冒号 :
前面的代码,不成立时就运行冒号 :
后面的代码,其实都是 if 和 else 的缩写:
if (a===1) {a=2} else if(a===3) {a=4}else{a=5}
作者: 路羽, 转载或复制请以 超链接形式 并注明出处 路羽博客。
原文地址: 《5个让你大开眼界的JavaScript奇葩写法》 发布于2024-2-6
评论