一、赋值运算符
1.赋值运算符通过数学中的等号(=)实现;
将右边的结果赋值给左边;
2.复合赋值运算符: += -= /= %= ;
例如: n = n + 10 == n += 10
二、数学运算符
+ - * / %
1.加号 + :
加号:正常的加法运算,如果两个无法相加的值进行相加,系统默认输出 NaN (关键字,表示不是一个数字);
正号:具有转换功能,将任意类型的值转换成数字,如果无法转换数字,也会输出NaN;
拼接符号:如果加号两边任意一边是字符串,加号就会变成拼接符号,将他们拼接起来。拼接的结果会转化成字符串显示;
(如果加号两边是布尔值,会将 true 转换为1,false 转换为0再相加,除非加号一边是是字符串,不然会优先转换为数字,无法转换为数字在转换为NaN);
2.减号 - :
相减
3.乘号 * :
相乘
4.除号: / :
相除
5.求余: % :
求余数
除了加号,其余的数学运算符会把字符串数字转化成数字(number)运算,对于无法转化成数字的会输出NaN。
6.求幂:**:
求幂运算 a ** b 将 a 提升至 a 的 b 次幂。
在数学中我们将其表示为 a的b次方。
三、关系运算符(比较运算符)
结果为布尔值: < > <= >= ==(相等) ===(严格等于) !=(不相等) !==(严格不相等)
(相等 == ,会造成等式两边的数据类型发生转换(别的类型转化为数字类型,遵循各个类型转化为数字类型的规律),导致得到的结果与我们预期不符,例如: 1 == true 得到的结果为true,所以我们如果要严谨的比较两个数据的原始形态是否相等应该使用严格相等 ===(严格相等不会对等式两边的数据类型进行任何转换))
比较的核心是数字的比较,如果比较字符串,会根据unicode编码大小进行比较;
1.相等和严格相等;
1.相等比较值是否相等,具有隐式转换
当全等一边有字符串格式的数字时,会将字符串格式的数字转换成真正的数字;
布尔值 true 会转换成1 ,false 会转换成0;
null == undefined ,这两个是相等的,但是在严格等于的情况下不相等;
还有一个有趣的现象,0 > null; //false(1) null == 0; //false(2) null >= 0; //true(3) 隐式转换: 比较运算符: console.log(1 > null); // true console.log(0 > null); // false console.log(0 >= null); // true console.log(0 == null); // false console.log(undefined == null); // true console.log(null == null); // true console.log(‘’ > null); // false console.log(‘1’ > null); // true console.log(1 > undefined); // false console.log(0 > undefined); // false console.log(0 >= undefined); // false console.log(0 == undefined); // false console.log(undefined == undefined); // true console.log(‘’ > undefined); // false console.log(‘1’ > undefined); // false console.log(1 > ‘’); // true console.log(0 > ‘’); // false console.log(0 >= ‘’); // true console.log(0 == ‘’); // true console.log(1 > ‘1’); // false console.log(1 == ‘1’); // true console.log(0 > ‘1’); // false console.log(0 >= ‘1’); // false console.log(0 == ‘1’); // false null 相等运算符转换后为 NaN null 在比较运算符转换后等于 0 undefined 在相等和比较运算转换后为 NaN NaN 独一无二,与自己本身不相等 ‘’ 空字符串在相等和比较运算符转后为 0 false 转换 0 true 转换 1 null === null 为false,因为null唯一,不与自身相等 undefined === undefined 为false,因为undefined唯一,不与自身相等 严格相等下,null/undefined与null/undefined比较时,不会进行隐式转换,并且null/undefined是独一无二的值,不与任何值相等,包括它本身 在 < > >= <= 等比较运算中,两边的遵循数据类型隐式转化的规则,会将两边的数据类型转化为数字类型进行比较. 2. 字母的unicode编码: A-Z 65-90 a-z 97-122汉字的unicode编码: UTF-8 (Unicode)
- u4e00-u9fa5 (中文) 拓展: (0x3400-0x4DB5) 新补充的中文编码
- x3130-x318F (韩文)
- xAC00-xD7A3 (韩文)
- u0800-u4e00 (日文)
3.NaN与NaN不相等,NaN表示不是一个数字,但是用类型检测符输出它的类型会发现它是数字类型,因为这个关键字是用来输出检测一个类型是否是数字类型的结果的;
4.因为浮点数的存在,如果用小数进行运算和比较,会发现他们不能相等,这是因为计算机的误差造成的,我们一般会将数值扩大成整数后再运算和比较,最后再将结果除以扩大的倍数;