2.类型、值和变量
2.1 Javascript类型:
原始类型:字符串、布尔值、数值、undefined、null、symbol(符号类型)
对象类型:对象、数组、函数
2.2 数值
2.2.1 整数字面量
十六进制:0x或0X开头
八进制:0o或0O开头
二进制:0b或0B开头
2.2.2 浮点字面量
2.2.3 Javascript中的算术
主要包括Math函数
Math.开头的函数
如Math.ceil(向上舍入)、Math.floor(向下舍入)、Math.pow(2,6)(求2的6次方)、Math.round(四舍五入)、Math.max(求最大值)、Math.min(求最小值)
Javascript中的一些运算准则: 上溢出、下溢出和被零除不会报错 正上溢出(Infinity)、负上溢出(-Infinity)、正下溢出(比最小可表示数值更接近0,则为0)、负下溢出(-0)
正零和负零相等,即使在严格模式下
被0除返回无穷或者负无穷
0除以 0结果为NaN
NaN与任何数值和非数值都不相等(两个NaN不相等)
所以不能用x===NaN来判断x的值是非数值,只能用(x!=x和Number.isNaN(x)来判断)
2.2.4 BigInt表示任意精度整数
表示方法:一串数字后面+小写字母n
BigInt()函数用于把数值或者字符串转换为BigInt值
BigInt(string)结果10n**100n
0==0n true
0===0n false
Math对象的人和函数不接受BigInt操作数
2.3 文本
2.3.1 字符串字面量
反斜杠的特殊用法
‘two\nlines’ 写在一行但表示两行
‘one\
long\
line’ 写在多行但只有一行
2.3.2 字符串API
S.length
S.substring(1,4) 第二到四个字符
S.slice(1,4) s.slice(-3) 最后三个字符
S.indexOf(“a”) 搜索 第一个 a字符出现的位置,没找到返回-1
S.lastIndexOf(“a”) 搜索最后一个a出现的位置
ES6之后新增
s.startWith(“hello”) s.endWith(“hello”) 字符串是不是以这些字符开头或结尾的
S.includes(“hello”) s是不是包含该子串
S.replace(“a”,”b”) 用b替换a
S.toLowerCase()、S.toUpperCase() 全部转换为大写和小写字母
S.charAt(0) S[0] 获取字符串中指定位置的字符
“x”.padStart(3,””)、”x”.padEnd(3,””) 在左侧或者右侧填充字符使其长度变为3,如第二个参数省略,则用空格填充
“test”.trim()、”test”.trimStart()、”test”.trimEnd() 删除左右侧、左侧、右侧的空格
s.concat(“!”) s+”!” 连接两个字符串
“2”.repeat(5) 重复5次
JS中的字符串不可修改,以上操作都返回一个新字符串
2.4 布尔值
假性值:false、undefined、null、’’、NaN、0、-0 在需要布尔值的地方返回false,其他返回true
但是undefined == false返回 false
2.5 null和undefined
typeof(null) 返回object
null==undefined null!==undefined
2.6 全局对象
全局函数:isNaN()、parseInt()、eval()(?)
全局常量:undefined、Infinity、NaN
构造函数:Date()、RegExp()、String()、Object()、Array()
全局对象:Math、json
Node全局对象:global
浏览器:window
ES2020:Node和浏览器:globalThis
2.7 是否可修改
JS中undefined、null、布尔值、数值、字符串都不可修改
原字符串不可修改 ,对字符串操作之后会返回一个新字符串
对象和数组可以修改,而且是引用 把对象赋值给一个变量,是在赋值引用,不会创建对象的副本,复制数组可以使用Array.from创建副本而不是引用
2.8 类型转换
2.8.1 转换与相等
Undefined==null true
Undefined==false false
0==false true(布尔值转换为数值0)
“0”==false true(两个操作数都转换为0)
==操作符不会将其他操作数转换为布尔值
2.8.2 显示转换
显示转换为数值、字符串或者布尔值的三个函数Number()、String()、Boolean()
常用的隐式转换:
X+”” 转为字符串
+x 转为数值
X-0 转为数值
!!x 转为布尔值
数值向字符串的特殊转换,四舍五入
let n = 123456.789;
n.toFixed(m) m指定的小数位数
n.toExponential(m) 转为科学计数法,小数点前1位,小数点后m位
n.toPrecision(m) 指定有效位数个数m
parseInt()、parseFloat()将字符串转为整数或者浮点数会忽略开头的空格和后面的无关字符,如果第一个字符是非空格非数值,则返回NaN
parse可以解析0x或0X开头的字符串
Number只能处理基数为10的,且不能处理后面为无关字符的
parseInt可以接受第二个参数,指定要解析的基数
如:parse(“077”,10) 77
parse(“077”,8) 63
2.9 对象到原始值转换
对象到布尔值的转换:所有对象都转为true
对象转为字符串:
2.10 变量声明与赋值
2.10.1 var、const和let
通过var实现的全局变量被实现为全局对象的属性,可以通过globalThis来引用(如 var x =10;等价于globalThis.x =10);通过const和let声明的变量不是全局对象的属性。