使用 ^ 切换变量 0 和 1
// 假如我们通过某个条件来切换一个值为0或者1
// if 判断
if (toggle) {
toggle = 0;
} else {
toggle = 1;
}
// 三目运算符
togle = toggle ? 0 : 1;
//位运算
toggle ^= 1;
使用 & 判断奇偶性
奇数的二进制最后一位必然为1,所以任意一个奇数 & 1 一定等于1
偶数 & 1 = 0
奇数 & 1 = 1
console.log(2 & 1); // 0
console.log(3 & 1); // 1
使用 !! 强制转为布尔值
// 特殊值 undefined,null,0,-0,NaN,"" 都为false
console.log(!!0); // false
// 所有非0的number、字符串都为true
console.log(!!-3); // true
console.log(!!'字符串本串'); // true
使用 ±*/强制转为Number
let num1 = +"1234"; // Number
let num2 = "1234" - 0;// Number
let num3 = "1234" * 1;// Number
let num4 = "1234" / 1;// Number
使用~、>>、<<、>>>、|来取整
// Math.floor() 的小兄弟
console.log(~~11.71) // 11
console.log(11.71 >> 0) // 11
console.log(11.71 << 0) // 11
console.log(11.71 | 0) // 11
console.log(11.71 >>> 0) // 11
Array 不一样的用法
// 重复字符
let b = Array(6).join(0); // "0000000"
let c = Array(6).join( '串' ) // "串串串串串串"
// ES6
let d = "0".repeat(7); // "0000000"
// 清空数组
let arr = [0, 1, 2, 3, 4, 5]
arr.length = 0 // []
// Array.slice() Array.concat()实现数组浅拷贝
let arr1 = [0, 1, 2, 3, 4, 5]
let arr2 = arr1.slice() // [0, 1, 2, 3, 4, 5]
let arr3 = arr1.concat() // [0, 1, 2, 3, 4, 5]
Boolean过滤数组中的所有假值
let arr = [0, 1, false, 2, '', 3, 'hello', 'e' * 23, NaN, undefined,-1,34]
let newArr = arr.filter(Boolean)
console.log(newArr) // [1, 2, 3, "hello", -1, 34]
JS|| && 妙用 多重if else 选择情况
// if else
var str_level = 0;
if(str_name == 'life'){
str_level = 1;
}else if(str_name == 'is'){
str_level = 2;
}else if(str_name == 'a'){
str_level = 3;
}else if(str_name == 'game'){
str_level = 4;
}else {
str_level = 0;
}
//switch
var str_level = 0;
switch(str_name){
case 'life' : str_level = 1;
break;
case 'is' : str_level = 2;
break;
case 'a' : str_level = 3;
break;
case 'game' : str_level = 4;
break;
default : str_level = 0;
break;
}
// && ||
var str_level =
(str_name=='life' && 1) ||
(str_name=='is' && 2) ||
(str_name=='a' && 3) ||
(str_name=='game' && 4) ||
0;
// --- 最优 ---
function getLevel(str_name){
return (
{
'life':1,
'is':2,
'a':3,
'game':4
}[str_name] || 0;
)
}
通过字符串比较时间先后
var a = "2020-07-17";
var b = "2014-08-17";
console.log(a>b, a<b); // false true
console.log("21:00"<"09:10"); // false
console.log("21:00"<"9:10"); // true 时间形式注意补0