目录
写在前面
简单来说,void运算符用于对给定的表达式进行求值,然后返回
undefined。
该运算符通常用于避免输出不应该输出的值。
常用语法
void expression
官方定义
这个运算符能向期望一个表达式的值是undefined
的地方插入会产生副作用的表达式。
void 运算符通常只用于获取 undefined
的原始值,一般使用void(0)
(等同于void 0
)。在上述情况中,也可以使用全局变量undefined
来代替(假定其仍是默认值)。
常见用法
通过采用void 0
取undefined
比直接写undefined
更靠谱更安全,应该优先采用void 0
这种方式;
填充<a>
的href
确保点击时不会产生页面跳转;填充<image>
的src
,确保不会向服务器发出垃圾请求;
简单介绍
在ES5之前,window
下的undefined
是可以被重写的,于是导致了某些极端情况下使用undefined会出现一定的差错。所以,用void 0
是为了防止undefined
被重写而出现判断不准确的情况。 ES5之后的标准中,规定了全局变量下的undefined
值为只读,不可改写的,但是局部变量中依然可以对之进行改写。
非严格模式下,undefined是可以重写的,严格模式则不能重写。
除了防止被重写外,还可以减少字节。void 0代替undefined省3个字节。类似的还有很多常用的写法,下面介绍一些老司机的套路,嘿嘿。
// 取整
parseInt(a,10); //Before
Math.floor(a); //Before
a>>0; //Before
~~a; //After
a|0; //After
// 四舍五入
Math.round(a); //Before
a+.5|0; //After
// 内置值
undefined; //Before
void 0; //After, 快
0[0]; //After, 略慢
// 内置值
Infinity;
1/0;
// 布尔值短写法
true; //Before
!0; //After
// 布尔值短写法
false; //Before
!1; //After
// 判断奇偶数(装逼写法)
if(n&1){
console.log("n为奇数")
}else console.log("n为偶数")