js运算符的妙用以及部分机理解析

运算符的诡异现象

分组运算符 ()

  • 分组运算符里面可以是表达式,也可以是字面量的值
  • 此算法不将GetValue应用于计算表达式的结果。这样做的主要原因是。诸如delete和typeof等操作符可以应用于括号表达式

逗号运算符

  • 逗号操作符 对它的每个操作数求值(从左到右),并返回最后一个操作数的值
let name = "let的name"
const person = {
	name: "person的name",
	getName(){
		return this.name;
	}
}
const getName = person.getName();
// 普通函数调用时,this指向的是调用函数的对象
getName(); // undefined this指向的是全局对象,let和const申明的变量不会放到全局对象中,var才会放到全局对象中
person.getName();  // person的name
(person.getName)(); 
// 并没有产生getValue操作,没有发生取值操作,也没有赋值行为 this->person
// person的name
(0, person.getName)();
// 等同于(const getName = person.getName)() this->全局对象
// undefined

typeof未申明变量为什么不报错(非严格模式)

引用不可达:返回undefined

窥探delete语法的本质

delete返回值是什么

  • Boolean类型
  • true,不一定删除成功,代表删除没有发生异常
  • false,一定没有删除成功

delete不能删除哪些属性

  • 任何用var声明的属性,不能从全局作用域或者函数的作用域删除
  • 任何用let或者const声明的属性,不能从它声明的作用域删除
  • 不可配置(configurable)的属性不能被删除
  • delete不会遍历圆形链,或者说姿势不对,应该用delete xxx.prototype.xxx
delete null; //true
delete 11;  //true
delete undefined; //false

a = { c: 12 }; 
delete a;  //true

var b = 12;
delete b; //false

delete xxxxxxx //true
delete ({}).toString  // true
console.log(({}).toString) //[Function: toString]

delete删除的到底是什么

  • 操作表达式结果
  • 值,字面量,和不可达的内容,不操作并直接返回true
  • 引用类型,删除引用

位运算符的妙用:奇偶数,色值换算,换值,编码等

位运算的基础知识

  • 操作数是32位整数
  • 自动转为整数
  • 速度T0,在二进制下进行运算

按位与 &
两个为1,则为1,否则为0

判断奇偶数字

// 奇数
num & 1 == 1
// 偶数
num & 1 == 0

按位或 |

  • 取整 x | 0
  • 自身 | 自身 = 自身,可以比较数值相等

按位非~
按位非运算符(~),反转操作数的位。表象是对数字求负,然后减1(-x-1) 例如 ~9 = -10

  • 判断数组中是否包含某个元素
function inArray(arr, val){
	//-1不存在,~-1 == 0,布尔值为 false
	//其他情况为真值,表示存在
	if(~arr.indexOf(val)){
		return true;
	}
	return false;
}
  • 取整 ~~x

按位异或^
只当一个数位 存放1时,返回1,否则为0
规律
1.归零率:a^a = 0 自己异或自己,位数上的值肯定相同
2.恒等率:a^0 = a 自己异或自己,自己是啥结果是啥
3.自反:a ^ a ^ a = a
4.结合率:a ^ b ^ c == c ^ b ^ a,与顺序无关

  • 值交换:变量值为数字,完成值的交换(不用增加临时变量)
let a = 10;
let b = 20;

a^=b;
b^=a;
a^=b;

RGB和16进制颜色值转换

function colorRGBToHex(rgb){
	// split 的参数可以是正则
	// "rgb(204,0,255)"
	const rgbArr = rgb.split(/[^\d]+/);
	// ['', '204', '0', '255', '']
	const color = rgbArr[1]<<16 | rgbArr[2] << 8 | rgbArr[3];
	return "#" + color.toString(16);
}
function colorHexToRGB(hex){
	//转为6位的16jinzhi 0xCC00FF
	let newHex = hex.replace('#','0x'),
		r = newHex >> 16,
		g = newHex >> 8 & 0xff,
		b = newHex & 0xff;
	return  "rgb(" + r + "," + b + "," + ")";
}

计算机是怎样进行数字相加的

十进制转二进制

  • 整数:除2取余,逆序排列
  • 小数:乘2取整,顺序排列

二进制转十进制

  • 小数点前:从右到左用二进制的每个数乘以2的相应次方递增
  • 小数点后:从左到右用二进制的每个数乘以2的相应负次方递增
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值