最近在看js的一些比较基础的东西,自己记录一下自己觉得比较容易遗忘或者混淆的知识点,方便自己温习,不足的地方还望大家支出更正,感谢!!!
单刀直入
js的基本数据类型(7 种原始类型和 1 种引用类型)
Number String BigInt Boolean Symbol null undefined Object
Number类型
除了一些常规数字,还有一些特殊值也属于number类型: `Infinity`、`-Infinity` 和 `NaN`。
`NaN` 代表一个计算错误。它是一个不正确的或者一个未定义的数学操作所得到的结果
Infinity 代表无穷大的数 可以通过除以0得到
1/0 //Infinity
typeof Infinity //number
"not a number" / 2 //NaN
类型转换
// number 类型转换规则:
// undefined --> NaN
// null --> 0
// true/false --> 1/0
//string --> 去掉首位尾空格 剩余的字符串为空 转为 0 不为空 从字符串“读取”数字,读到 不为数字 时出现错误 提取失败 为NaN
// parseInt()// 从前面截取到不是数字的地方 转为数字
Number(null) // 0
Number(undefined) //NaN
Number('12a')//NaN
Number("1 2")//NaN
parseInt("12a")//12
// boolean 类型转换规则:
// 布尔值转换 除了null 0 undefined NaN '' 为false 其余都为true
Boolean(null) //false
Boolean(0) //false
Boolean(undefined) //false
Boolean(NaN) //false
Boolean('') //false
//注意
Boolean(" ")//true
Boolean("0")//true
运算符
取余 : %
6 % 2 //0 6除以2的余数为0
8 % 3 //2 8除以3的余数为2
求幂 : **
求幂运算 a ** b 是 a 乘以自身 b 次
2 ** 2 // 4 (2 * 2)
2 ** 3 // 8 (2 * 2 * 2)
2 ** 4 // 16(2 * 2 * 2 * 2)
求幂的定义也适用于非整数
9** (1/2) // 3 (4开平方分)
8** (1/3 // 2 (8开立方根)
**运算元**(运算符应用的对象。比如说乘法运算 `5 * 2`,有两个运算元:左运算元 `5` 和右运算元 `2`)
1. 如果一个运算符对应的只有一个运算元,那么它是 **一元运算符**。
let a = 1;
a = -a //一元负号运算符生效
2.如果一个运算符拥有两个运算元,那么它是 **二元运算符**
let x = 1, y = 3;
( y - x ); // 2,二元运算符减号做减运算
3.1一元运算符加号,或者说,加号 `+` 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 `+` 则会将其转化为数字。
+true // 1
+'' //0
字符串求和
let a= '2' , b = '3'
+a + +b // 5
3.2数字连接 + 如果有一个是字符串 则为拼接 唯一一个以这种方式支持字符串的运算符
运算符运算在运算等级相同的情况下遵循 从左至右的执行顺序
2 + 2 + '1' //41
'1' + 2 + 2 //122
有趣的对比
let a = 0 ,b = '0';
Boolean(a) // false
Boolean(b) // true
a == b //true
因为 JavaScript 会把待比较的值转化为数字后再做比较(因此 "0" 变成了 0)。若只是将一个变量转化为 Boolean 值,则会使用其他的类型转换规则。上面有boolean类型的转换规则(布尔值转换 除了null 0 undefined NaN '' 为false 其余都为true)
值的比较
字符串的比较 只有两个不同类型的值比大小时才会转换为数字
2 > 12 //false
'2' > 12//false
'2' > '12' //true
null和undefined的比较
null === undefined //false 它们不相等,因为它们属于不同的类型。
null == undefined //true JavaScript 存在一个特殊的规则,会判定它们相等。
-
当使用数学式或其他比较方法
< > <= >=时: -
null/undefined会被转化为数字:null被转化为0,undefined被转化为NaN。
null > 0 //false (1)
null == 0 //false (2)
null >= 0 //true (3)
在最后一行代码显示null 大于等于 0 情况下,前两行代码中一定会有一个是正确的,然而事实表明它们的结果都是 false。
因为相等性检查(==)和> < >= <= 的逻辑代码是相互独立的,进行值比较的时候 null 会被转化为 0 。这就是为什么(3)返回值为true (1)中返回值为false
另一方面,undefined 和 null 在相等性检查 == 中不会进行任何的类型转换
,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 null == 0 会返回 false。
-
undefined不应该被与其他值进行比较undefined > 0 //false undefined < 0 //false undefined == 0 // false
原因如下:
(1)和(2)都返回false是因为undefined在比较中被转换为了NaN,而NaN是一个特殊的数值型值,它与任何值进行比较都会返回false。(3)返回false是因为这是一个相等性检查,而undefined只与null相等,不会与其他值相等。 ......
夜深了,暂时就先到这吧,后面边看边记录,素材资料来自 现代 JavaScript教程 ,感兴趣的各位可以移步观看。