182 lines
4.1 KiB
JavaScript
182 lines
4.1 KiB
JavaScript
// 加法运算符
|
||
|
||
// console.log(1 + 2); // 3
|
||
|
||
// 非数值(非字符串)会被转换为数值
|
||
// console.log(true + true); // 2
|
||
|
||
// 如果有一个操作数是字符串,那么就是进行字符串的拼接
|
||
// console.log('3' + 4 + 5); // '345'
|
||
|
||
// 如果是对象,会先将对象转为数值类型(Number)
|
||
// 对象转 Number 会先调用 valueOf,如果得到的还是对象
|
||
// 那么就会调用 toString,如果 toString 都还是对象,那就报错
|
||
// console.log([] + 1); // '1'
|
||
|
||
// var obj = {
|
||
// name : "xiejie",
|
||
// valueOf(){
|
||
// return 2;
|
||
// },
|
||
// toString(){
|
||
// return 3;
|
||
// }
|
||
// }
|
||
|
||
// console.log(obj + 1); // '[object Object]1'
|
||
|
||
// console.log([].valueOf());
|
||
// console.log([].toString());
|
||
|
||
// console.log({}.valueOf());
|
||
// console.log({}.toString());
|
||
|
||
// var d = new Date();
|
||
// d.toString = function(){
|
||
// return 2;
|
||
// }
|
||
// d.valueOf = function(){
|
||
// return 3;
|
||
// }
|
||
// console.log(d + 1);
|
||
|
||
// 四则运算中的 -、*、/ 都是转成数值进行运算即可
|
||
// 如果无法转为数值,那么最终得到的就是 NaN
|
||
// console.log('5' - '2');
|
||
// console.log('5' - true);
|
||
// console.log({} - '2');
|
||
|
||
// 余数
|
||
// console.log(5 % 2);
|
||
|
||
// 在做取余运算时,小数对大数取余,直接得到这个小数
|
||
// console.log(3 % 100);
|
||
// console.log(1 % -2);
|
||
|
||
// 自增自减
|
||
// 需要注意的就是运算符在前和在后的区别
|
||
// 在前:先做自增或者自减,然后再参与运算
|
||
// 在后:先做运算,然后再自增或者自减
|
||
|
||
// var i = 1;
|
||
// ++i;
|
||
// var j = i + 5;
|
||
// console.log(i);
|
||
// console.log(j);
|
||
|
||
// 数值运算符
|
||
// console.log(+5);
|
||
// console.log(-5);
|
||
|
||
// console.log(-true);
|
||
// console.log(-[]);
|
||
// console.log(-{});
|
||
// 之所以 [] 转出来是 0,是因为空数组在转为字符串的时候得到的是空字符串
|
||
// 空字符串转为数字就是 0
|
||
|
||
// 而 {} 转字符串得到的是 [object Object]
|
||
|
||
// console.log(Number([1]));
|
||
|
||
// 指数运算符
|
||
|
||
// console.log(Math.pow(2, 3));
|
||
// console.log(2 ** 3);
|
||
|
||
// 比较运算符
|
||
|
||
// console.log(5 > 3);
|
||
|
||
// NaN 在做比较的时候一定得到的是 false
|
||
// NaN 在做计算的时候得到的是 NaN
|
||
// console.log(5 > NaN);
|
||
// console.log(5 < NaN);
|
||
// console.log(5 + NaN);
|
||
// console.log(5 - NaN);
|
||
// console.log(5 * NaN);
|
||
// console.log(5 / NaN);
|
||
// console.log(NaN === NaN);
|
||
|
||
// 会先将 '3' 转为数值
|
||
// 当遇到不是数值的操作数,会先将其转为数值
|
||
// console.log(5 > '3');
|
||
// console.log(5 > true);
|
||
// console.log(5 > []);
|
||
// console.log(5 > {});
|
||
|
||
// 如果两边都是字符串,那么这个比较规则就又变化了
|
||
// 比较的是字符的编码大小
|
||
|
||
// 如果是一个字符串,那么就取出字符串的每一个字符来进行比较
|
||
// console.log('a' > 'A');
|
||
// console.log('cat' > 'coyfriend');
|
||
// console.log('cat' > 'cata');
|
||
// console.log('大' > '小');
|
||
|
||
// 严格相等
|
||
// console.log(5 === '5');
|
||
|
||
// 相等运算符
|
||
// console.log(5 == '5');
|
||
|
||
|
||
// console.log(3 === 0b11);
|
||
|
||
// 对象在比较的时候,比较的就不是值了
|
||
// 而是比较的地址
|
||
// console.log([] > []);
|
||
|
||
// var arr = [];
|
||
// var arr2 = arr;
|
||
// console.log(arr === arr2);
|
||
|
||
// 严格不想等
|
||
|
||
// console.log(5 !== '5');
|
||
|
||
// 相等运算符
|
||
// console.log('123' > 1);
|
||
|
||
// console.log(5 != '5');
|
||
|
||
// console.log(Boolean(undefined));
|
||
// console.log(Boolean(null));
|
||
// console.log(Boolean(''));
|
||
// console.log(Boolean(0));
|
||
// console.log(Boolean([]));
|
||
|
||
// 快速将一个值转为布尔值
|
||
// console.log(!!54);
|
||
// console.log(!!undefined);
|
||
|
||
// && 运算符
|
||
// 有一个为假就都为假,全部为真最终才会得到真
|
||
// 注意短路现象
|
||
|
||
// console.log(1 && 2 && 0 && 4 && 5);
|
||
|
||
// || 运算符
|
||
// 有一个是真值,就为真,如果全部都为假最终就是假
|
||
// console.log(0 || '' || null || null || undefined)
|
||
|
||
// 位运算符
|
||
// console.log(~5);
|
||
|
||
// console.log(12 & 10);
|
||
// console.log(12 | 10);
|
||
// console.log(12 ^ 10);
|
||
|
||
// console.log(10 >> 3);
|
||
// 等价于乘以 2 的 3 次方
|
||
|
||
var a = {
|
||
i: 1,
|
||
toString() {
|
||
return a.i++;
|
||
}
|
||
}
|
||
// Number ----> valueOf ----> toString
|
||
if (a == 1 && a == 2 && a == 3) {
|
||
console.log('1');
|
||
}
|