本文概述
- ?运算子
- ~~运算符
~2 === -3;
//true~1 === -2;
//true~0 === -1;
//true~-1 === 0;
//true// To explain you// This is what the operator does to the given numberfunction bitwiseOperator(value){
var result = Math.floor(value);
// return the negative value of the result + 1;
return - (result+ 1);
}bitwiseOperator(2) === -3;
//truebitwiseOperator(1) === -2;
//truebitwiseOperator(0) === -1;
//truebitwiseOperator(-1) === 0;
//true
但是, 有许多开发人员抱怨使用此运算符, 因为它使代码” 可读性差” , 但是严重……
// A developer gets angry if see thisif (~[1, 2, 3].indexOf(2)) {console.log("The array contains 2");
}// Explanation (if you don't understand ...)/**[1, 2, 3].indexOf(2) returns 1and using ~ makes that 1 becomes : -2Therefore -2 is truthy !Remember : 0 is falsy , that's why this shortcut works as ~-1 == false;
*/// but they don't get angry writing moreif ([1, 2, 3].indexOf(2) !== -1) {console.log("The array contains 2");
}
与!== -1比较完全等同于使用?验证结果是否为-1, 因为:
var isNotInArray = ~-1;
// 0 == falsevar isInArray = ~0;
// any index : 0 or 1 or 2 or 3 etc. : -1 == true
波浪号后只有-1是虚假的, 因此indexOf结果只有在!== -1时才是真实的。
~~运算符利用此运算符的功能的最实际方法是将其用作Math.floor()函数的替代品, 因为双按位NOT不会更快地执行相同的操作。
~~2 === Math.floor(2);
//true, 2~~2.4 === Math.floor(2);
//true, 2~~3.9 === Math.floor(3);
//true, 3
但是, 请注意负数!你可能会注意到不想要的结果:
var a = ~~-4.5;
// -4var b = Math.floor(-4.5);
// -5var c = Math.ceil(-4.5);
// -4(a == b) // false(a == c) // true
在具有负数的情况下, ~~运算符似乎不像Math.floor那样充当Math.ceil。
【JavaScript按位NOT,?运算符】尽管有些开发人员不喜欢这一点, 但我们不同意这一点。你应该抱怨的是, 如何抱怨代码的工作原理, 而无需抱怨什么。在代码中也存在称为” 注释” 的内容, 以帮助阅读。
推荐阅读
- 如何使用JavaScript在单击或鼠标事件中从画布获取像素颜色
- 如何验证何时在JavaScript中加载了多个图像
- 画布已被跨源数据污染,污染的画布可能无法导出
- 使用“一键清理”功能要防止删除WORD文档
- 图解Web前端实现类似Excel的电子表格
- 配置思科路由器Telnet 登陆
- jquery.fileDownload.js插件导出excel
- Word中使用正则表达式进行查找和替换与难题征解
- Powershell 创建炫丽美观的Html报表