首先记录一下,mac上option+<或者option+>可以打出≤以及≥(嘻嘻😝)
- 对于const 的更深入的认知
const obj = {
a: 2,
b: 3
};
obj.a = 3;
console.log('obj', obj);
obj = {
a: 3,
b: 2
};
console.log('obj in direct change', obj);
结果
总结:
对于const声明的引用类型,可以改变当前指向对象内部的值,但是不可以重新指向新的对象。
对于const let以及es6中的class类的生命都需要遵循先声明后使用的规则。
类型转换中,null转换为0,主要是源于c语言中,空指针其实是设计为0值的。
**以及>>
的使用,求幂运算符以及右位移运算符可以帮助我们进行幂运算以及整除运算。
5>>1 //表示整除2时的结果
5>>2 //表示整除4时的结果
主要的机制源于,基本类型以及引用类型的转换规则差别
转换基本类型的时候,只需要注意,null undefined NaN 0 ''五种特殊情况。
例如转换为字符串类型
// 转换为字符串
console.log(null + ''); //'null'
console.log(undefined + ''); // 'undefined'
console.log(NaN + ''); //'NaN'
console.log(0 + ''); //'0'
console.log('' + ''); //''
// 转换为数字
console.log(null + 0); //0
console.log(undefined + 0); // NaN undefined转换为数字时为NaN
console.log(NaN + 0);
//NaN NaN与任何数做运算得到的答案都是NaN,但是它本身是数字类型,表示在要将某一个变量转换为数字时并没有成功,则使用一个不是数字的类型去表示未能成功转换为数字类型的类型,说白了就是转换数字类型时的一个兜底的数字表示类型,还是数字
console.log(0 + 0); //0
console.log('' + 0); //0
//转换为布尔类型
console.log(Boolean(null)); //false
console.log(Boolean(undefined)); //false
console.log(Boolean(NaN)); //false
console.log(Boolean(0)); //false
console.log(Boolean('')); //false
const fn = function(){};
// 在转换引用类型的时候,对象会主动调用自己的toString以及valueOf方法,当valueOf不能反悔基本类型的时候才会去使用toString
console.log({}.toString()); //[object Object]
console.log([].toString()); // ''
console.log(fn.toString()); // function(){}
- 在众多的类型转换中,date类型的对象,算是一个特例。不同于对象以及数组,函数等,将日期转换为基本类型时它更倾向于先调用toString方法,所以在以下代码中,返回的结果让我有些意外:
const date = new Date(2018,09,24);
date.valueOf = function(){
return 3;
};
date.toString = function (){
return '2';
};
console.log('date', date);
const newDate = date + 20000;
console.log('newDate', newDate);
- 对于几种常见的比较操作符,除了全等操作符之外,其他的操作符均存在类型转换。
但是只需要记住几种情况比较特殊即可。
对于>,<,≥,≤来说,都遵循着以下规则:
1). 当两个操作数都为字符串类型时,不进行数据类型转换,直接比较每个字符的字符编码值
2). 当两个操作数不同时为字符串时,将操作数转为数字类型,然后进行比较
3). 如果操作数中存在对象类型,先将对象转为基础类型,然后再根据上面两条进行值的比较。
console.log('1' > '2'); //false
console.log(1 > '2'); //false
console.log({} > []); // true
对于“==”操作符,则是多了一条特殊的规则:null和undefined在比较时不进行数据转换,null和自身比较、null和undefined比较都会返回true,和其他值比较都会返回false;undefined和自身比较、undefined和null比较都会返回true,和其他值比较都会返回false。