2024-08-27 10:14:31 +08:00

182 lines
4.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 加法运算符
// 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');
}