js的一些骚操作

使用 ^ 切换变量 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值